我正在从websockets服务器向我的客户端发送一个字符串,该客户端上有一个jqgrid。
字符串是一个JSON对象,我正在使用eval()进行转换(我知道这不是最佳实践,但这只是为了在这一点上验证概念)
我只是想用重新加载jqgrid
var obj = eval("(" + msg.data + ")");
$("#list").setGridParam({ "postData" : obj }).trigger("reloadGrid");
其中msg是我的socket.onmessage回调中的参数,如果我发出警报(msg.data),我会看到格式正确的JSON字符串,但我的网格不会重新加载。
如果我提醒obj,我会看到它正在正确地转换为对象。
我还试着把触发器("reloadGrid")拆分到一个单独的行上,我的$("#list")正在为它做准备……仍然没有重新加载。
有什么建议吗?
如果您使用datatype: 'jsonstring'
和datastr: msg.data
,并且您希望用另一个数据重新加载网格,那么您应该知道datatype: 'jsonstring'
将在第一次加载后更改为datatype: 'jsonstring'
。只有当您与服务器通信时,才会使用postData
参数。在这种情况下,datatype
必须是'json'
或'xml'
。在这种情况下也应该设置url
参数。
所以我可以试着做以下事情:
$("#list").setGridParam({
datatype: 'jsonstring', // reset the `datatype`
datastr: msg.data // set new value of the input data
}).trigger("reloadGrid");