基于POST中的dstore / Rest结果更新OnDemandGrid而不是PUT

时间:2017-11-22 15:26:40

标签: javascript php dojo dgrid dstore

我很困惑。 我有一个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请求...我尝试了浏览器调试器,服务器日志,没有任何地方。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我终于修好了。

它非常复杂,很少记录所有这些混乱。我不得不深入研究浏览器调试器和dgrid / Rest源代码。

所以问题出在我的REST后端。事实证明,dgrid在请求修改项目的PUT / POST之前执行GET,并且通过询问特定的“id”来执行仅具有一个记录的GET。这很有意义。

好吧,我的后端会以JSON格式返回一个带有一个元素的ARRAY。这是错误! dgrid没有正确解析它,它导致POST而不是PUT。

一旦我修复GET后端以返回单个JSON项而不是内部有一个JSON项的数组,dgrid就开始发送正确的PUT。