jqGrid重新加载数据类型:每个请求的本地

jqGrid重新加载数据类型:每个请求的本地,jqgrid,Jqgrid,我正在使用jqGrid,但由于我的服务器端技术,我无法直接调用URL来获取数据,只能通过第三方代理发布到服务器。我的目标是能够通过调用调用服务器并返回JSON字符串的JavaScript函数将数据加载到网格中 我尝试的是:而不是 url:'http://127.0.0.1/products/index.php’, datatype: 'json', 我有 datastring:init(), datatype: 'jsonstring', myinit()函数执行服务器端调用。它在初始页面加

我正在使用jqGrid,但由于我的服务器端技术,我无法直接调用URL来获取数据,只能通过第三方代理发布到服务器。我的目标是能够通过调用调用服务器并返回JSON字符串的JavaScript函数将数据加载到网格中

我尝试的是:而不是

url:'http://127.0.0.1/products/index.php’,
datatype: 'json',
我有

datastring:init(),
datatype: 'jsonstring',
my
init()
函数执行服务器端调用。它在初始页面加载时工作良好。但是,当我在页面之间跳转或更改要查看的行数时,将不再调用它。我需要它调用init函数来刷新数据库中的数据。但是,它不会多次调用my
init()
函数。我假设它认为这是一个硬编码字符串,永远不会改变

我试图调用
$(#mygrid”).trigger(“reloadGrid”)手动,但它似乎也不起作用

我的网格是:

<script type="text/javascript">
$(function(){
  $("#list").jqGrid({
    datastr:init(),
    datatype: 'jsonstring',
    mtype: 'GET',
    beforeRequest: beforeReq,
    pager: '#pager',
    rowNum:5,
    rowList:[5,10,30],
    sortname: 'invid',
    sortorder: 'desc',
    grouping:true,
    viewrecords: true,
    gridview: true,

  });
});
</script>

我尝试了Oleg的建议,但它似乎仍然没有再次调用我的init函数。

您当前的代码在创建网格之前调用了
init()
一次。然后使用从
init()
返回的结果创建网格

如果您确实需要使用
数据类型:“jsonstring”
(而不是
数据类型:“local”
和其他
数据
参数),则可以在调用
重新加载网格
之前重置
datastr
参数的值。相应的代码可能与以下内容有关:

$(“#列表”).setGridParam({
数据类型:“jsonstring”,
datastr:init()
}).trigger(“重新加载网格”,[{page:1}]);

在创建网格之前,当前代码调用
init()
一次。然后使用从
init()
返回的结果创建网格

如果您确实需要使用
数据类型:“jsonstring”
(而不是
数据类型:“local”
和其他
数据
参数),则可以在调用
重新加载网格
之前重置
datastr
参数的值。相应的代码可能与以下内容有关:

$(“#列表”).setGridParam({
数据类型:“jsonstring”,
datastr:init()
}).trigger(“重新加载网格”,[{page:1}]);

谢谢,这似乎有效。然而,我不知道该把代码放在哪里。我试着把它放在beforeRequest函数()中,但最终它变成了一个无限函数loop@Daveo:您没有在使用
$(“#list”).setGridParam({datatype:'jsonstring',page:1})的位置发布。触发器('reloadGrid')之前。所以很难回答现在应该把它放在哪里。如果
init()
函数同步运行,您只需在
beforeRequest
中使用
setGridParam
即可,无需使用
reloadGrid
。这似乎很好,我可以在网格中获取数据。但是分页并没有改变,它总是显示1页中的1页,并且即使我有3页,也没有下一页按钮。我的页面大小=10。我的JSON是“总计”:“3”,“页面”:“1”,“记录”:“31”,“下次我在德国时,我欠你一笔钱。”beer@Daveo:不客气!如果您确实需要实现服务器端分页,那么可以尝试使用定义为函数的
datatype
(请参阅)。服务器端分页是在内部不使用jQuery.ajax的情况下实现的。谢谢,这似乎很有效。然而,我不知道该把代码放在哪里。我试着把它放在beforeRequest函数()中,但最终它变成了一个无限函数loop@Daveo:您没有在使用
$(“#list”).setGridParam({datatype:'jsonstring',page:1})的位置发布。触发器('reloadGrid')之前。所以很难回答现在应该把它放在哪里。如果
init()
函数同步运行,您只需在
beforeRequest
中使用
setGridParam
即可,无需使用
reloadGrid
。这似乎很好,我可以在网格中获取数据。但是分页并没有改变,它总是显示1页中的1页,并且即使我有3页,也没有下一页按钮。我的页面大小=10。我的JSON是“总计”:“3”,“页面”:“1”,“记录”:“31”,“下次我在德国时,我欠你一笔钱。”beer@Daveo:不客气!如果确实需要实现服务器端分页,那么可以尝试使用定义为函数的
datatype
(请参阅),这是在内部不使用jQuery.ajax实现的。
$("#list").setGridParam({datatype:'jsonstring', page:1}).trigger('reloadGrid');