我很困惑。 我有一个OnDemandGrid可编辑,在它下面我有一个dstore / Rest集合指向我的后端(在PHP中)。
OnDemandGrid与编辑器混合......我可以编辑我的数据,但我无法保存。我在服务器端收到的是一个“POST”请求,要求在集合中插入一整行...而且我从未收到更新。
我不应该收到PUT请求吗?我在数据中使用了id ...
这是客户端部分:
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查询以填充表格...然后,在编辑一行并点击“返回”后,我收到了一个帖子!
服务器端在这里显示有点复杂......基本上,在GET上我做一个SQL查询并json-ize结果,而在POST上我只返回这个:
http_response_code(201);
header("location: ".$_SERVER['PATH_INFO'].$id);
其中$ id与我从请求中收到的ID相同...
POST后,我没有收到任何其他内容。在POST数据中,我只收到旧的,未修改的行的副本......我从未收到过“新”编辑的数据。
在我看来,我应该在某个时候收到PUT请求...我尝试了浏览器调试器,服务器日志,没有任何地方。
有人可以帮助我吗?
答案 0 :(得分:0)
我终于修好了。
它非常复杂,很少记录所有这些混乱。我不得不深入研究浏览器调试器和dgrid / Rest源代码。
所以问题出在我的REST后端。事实证明,dgrid在请求修改项目的PUT / POST之前执行GET,并且通过询问特定的“id”来执行仅具有一个记录的GET。这很有意义。
好吧,我的后端会以JSON格式返回一个带有一个元素的ARRAY。这是错误! dgrid没有正确解析它,它导致POST而不是PUT。
一旦我修复GET后端以返回单个JSON项而不是内部有一个JSON项的数组,dgrid就开始发送正确的PUT。