JavaScript — обновить OnDemandGrid на основе dstore / Rest результат в POST, а не PUT

Я озадачен.
У меня есть редактируемый OnDemandGrid, и под ним у меня есть коллекция dstore / Rest, указывающая на мой бэкэнд (в PHP).

OnDemandGrid смешивается с редактором … Я могу редактировать свои данные, но не могу сохранить их. На стороне сервера я получаю запрос «POST» для вставки полной строки в коллекцию … И я никогда не получаю обновления.

Должен ли я вместо этого получить запрос PUT? Я использую идентификаторы в данных …

Это часть на стороне клиента:

function (...)
{
var EditGrid = declare([ OnDemandGrid, Keyboard, Editor ]);
var coll = new Rest({
target: 'my.php/x/',
idProperty: 'id',
rangeStartParam: 'range',
rangeCountParam: 'limit',
sortParam: 'sort'
});
var grid = new EditGrid({ columns: {
user_name:{
label: 'User name',
editor: 'text',
editOn: 'click, dbclick',
autoSave: true,
}},
collection: coll }, 'grid' );
grid.startup();
}

Я правильно получаю запрос GET для заполнения таблицы … Затем, после редактирования строки и нажатия «return», я получаю POST!

Серверная сторона немного сложнее, чтобы показать здесь … В основном, при GET я делаю SQL-запрос и json-ize результаты, в то время как на POST я просто возвращаю это:

http_response_code(201);
header("location: ".$_SERVER['PATH_INFO'].$id);

Где $ id — это тот же идентификатор, который я получил из запроса …

После POST я больше ничего не получаю. И в данных POST я только получаю копию старой, неизмененной строки … Я никогда не получаю «новые» отредактированные данные.

Мне кажется, что я должен получить запрос PUT в какой-то момент … Я пробовал отладчик браузера, журналы сервера, ничего нигде.

Кто-нибудь может помочь мне здесь?

1

Решение

Я наконец исправил это.

Это очень запутанный и очень мало задокументированный весь этот беспорядок. Мне пришлось копаться в браузере отладчика и немного исходного кода dgrid / Rest.

Так что проблема была в моем REST бэкэнде. Оказывается, dgrid выполняет GET перед запросом PUT / POST, запрашивающим изменение элемента, и выполняет GET только с одной записью, запрашивая конкретный «id». Это имеет смысл.

Ну, мой бэкэнд вернул бы ARRAY с одним элементом в формате JSON. Это была ошибка! Это не правильно анализируется dgrid, и это приводит к POST вместо PUT.

Как только я исправил бэкэнд GET, чтобы он возвращал один элемент JSON вместо массива с одним элементом JSON внутри, dgrid начал отправлять правильные PUT.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]