基于 dstore/Rest 更新 OnDemandGrid 结果为 POST 而不是 PUT
Update a OnDemandGrid based on dstore/Rest result in POST and not PUT
我很纳闷。
我有一个 OnDemandGrid editable,在它下面有一个 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 查询以填充 table...然后,在编辑一行并点击 "return" 后,我得到一个 POST!
服务器端在此处显示有点复杂...基本上,在 GET 上我执行 SQL 查询并 json-ize 结果,而在 POST 上我只是 return 这个:
http_response_code(201);
header("location: ".$_SERVER['PATH_INFO'].$id);
其中 $id 与我从请求中收到的 ID 相同...
在 POST 之后,我没有收到任何其他信息。在 POST 数据中,我只收到旧的、未修改的行的副本...我从未收到 "new" 编辑的数据。
在我看来我应该在某个时候收到一个 PUT 请求...我尝试了浏览器调试器、服务器日志,但什么都没有。
有人可以帮我吗?
我终于修好了。
它非常令人费解,而且几乎没有记录所有这些乱七八糟的事情。我不得不深入研究浏览器调试器和 dgrid/Rest 源代码。
所以问题出在我的 REST 后端。事实证明,dgrid 在 PUT/POST 请求修改项目之前执行了 GET,并且它通过请求特定的 "id" 仅对一条记录执行了 GET。有道理。
好吧,我的后端会 return 一个包含一个元素的数组,格式为 JSON。这就是错误!这没有被 dgrid 正确解析,它导致 POST 而不是 PUT.
一旦我将 GET 后端固定为 return 单个 JSON 项目而不是内部包含一个 JSON 项目的数组,dgrid 开始发送正确的 PUT。
我很纳闷。 我有一个 OnDemandGrid editable,在它下面有一个 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 查询以填充 table...然后,在编辑一行并点击 "return" 后,我得到一个 POST!
服务器端在此处显示有点复杂...基本上,在 GET 上我执行 SQL 查询并 json-ize 结果,而在 POST 上我只是 return 这个:
http_response_code(201);
header("location: ".$_SERVER['PATH_INFO'].$id);
其中 $id 与我从请求中收到的 ID 相同...
在 POST 之后,我没有收到任何其他信息。在 POST 数据中,我只收到旧的、未修改的行的副本...我从未收到 "new" 编辑的数据。
在我看来我应该在某个时候收到一个 PUT 请求...我尝试了浏览器调试器、服务器日志,但什么都没有。
有人可以帮我吗?
我终于修好了。
它非常令人费解,而且几乎没有记录所有这些乱七八糟的事情。我不得不深入研究浏览器调试器和 dgrid/Rest 源代码。
所以问题出在我的 REST 后端。事实证明,dgrid 在 PUT/POST 请求修改项目之前执行了 GET,并且它通过请求特定的 "id" 仅对一条记录执行了 GET。有道理。
好吧,我的后端会 return 一个包含一个元素的数组,格式为 JSON。这就是错误!这没有被 dgrid 正确解析,它导致 POST 而不是 PUT.
一旦我将 GET 后端固定为 return 单个 JSON 项目而不是内部包含一个 JSON 项目的数组,dgrid 开始发送正确的 PUT。