dojo 根据POST中的数据存储/Rest结果更新OnDemandGrid,而不是PUT

t8e9dugd  于 2022-12-16  发布在  Dojo
关注(0)|答案(1)|浏览(125)

我很困惑,我有一个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查询来填充表...然后,在编辑了一行并点击“返回”之后,我得到了一个POST!
服务器端在这里要复杂一些......基本上,在GET上我执行SQL查询并将结果json-ize,而在POST上我只返回以下内容:

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

其中$id是我从请求中收到的同一个ID...
POST之后,我没有收到任何其他的东西,而且在POST数据中,我只收到了旧的,没有修改过的行的副本......我从来没有收到过“新的”编辑过的数据。
在我看来,我应该在某个时候收到一个PUT请求...我试过浏览器调试器,服务器日志,任何地方都没有。
有人能帮我吗?

xdnvmnnf

xdnvmnnf1#

我终于修好了。
这是非常复杂的,几乎没有记录所有这些混乱。我不得不深入研究浏览器调试器和dgrid/Rest源代码一点。
所以问题都出在我的REST后端,原来dgrid在PUT/POST之前做了一个GET,请求修改项目,并且它通过请求特定的“id”只做了一个记录的GET,这是有意义的。
我的后端会返回一个数组,其中有一个元素,是JSON格式的。这就是错误!dgrid没有正确解析它,它导致POST而不是PUT。
一旦我修复了GET后端,使其返回单个JSON项,而不是包含一个JSON项的数组,dgrid就开始发送正确的PUT。

相关问题