我有一个页面上有几个jqGrids,还有一些其他字段。我想自己做一个AJAX调用,它会返回一个JSON对象,该对象具有应该用于填充整个页面的数据。
所以,我想自己进行调用,填充“其他字段”,然后从返回的主JSON对象中拉出几个集合,并“手动”将这些集合填充到每个jqGrids中。 / p>
我有这么多工作,但我不能让jqGrid停止尝试自己发出一个AJAX请求。难道有没有办法告诉jqGrid在初始化时不尝试AJAX调用?
我在这里问了一个类似的问题:How to suppress jqgrid from initially loading data?
但我没有为海报解决问题的选择。
对我来说,似乎有些人可能想要使用这个插件而不让表在初始化时尝试获取自己的数据。我在文档(wiki - options)的某个地方错过了一个选项吗?
感谢。
答案 0 :(得分:8)
有一种简单的方法可以说jqGrid不会加载数据本身。您应该使用datatype: 'local'
作为jqGrid选项。此选项表示您计划使用addRowData
或addJSONData
等功能自行填充网格数据(请参阅jqGrid tableToGrid "options" parameter上的示例)。您还可以在loadComplete
回调内的网格中填充数据,因为jqGrid也会在datatype: 'local'
的情况下调用此函数。
请注意,您使用addJSONData
和jsonReader
读取(解析)作为jsonmap
参数提供的数据。它为您提供了一个很好的方法,不会操纵从服务器收到的数据。而不是仅仅在jsonmap
中为jqGrid提供正确的数据映射就足够了。您可以在Mapping JSON data in JQGrid中找到相对复杂的数据映射示例。
如果您考虑优化数据传输,请查看http://trirand.com/blog/jqgrid/jqgrid.html演示页面上的“数据映射”\“数据优化”部分。我们的想法是将表示行的数据结构替换为字符串数组。然后,没有列名称(结构的归档名称)将从服务器发送到客户端,从而压缩数据传输。通过这种优化,您可以像其他方式一样节省更多时间。不要忘记在Web服务器上打开数据压缩。这也可以大大减少数据传输的大小。
最后,我建议您查看我的讨论问题Should one replace the usage addJSONData of jqGrid to the usage of setGridParam(), and trigger('reloadGrid')?,其中我将 addJSONData()函数的使用与 trigger('reloadGrid')<的使用进行比较/ em>的。因为如果你想一次更新一个表,那么 trigger('reloadGrid')会慢一点,就像你只进行一次ajax
调用一样,但你的程序结构使用触发器('reloadGrid')会更容易。如果比较两种情况下的总时间,那么数据传输可能不是您的瓶颈。所以可能的是,两种情况下的页面加载总时间几乎没有变化。最好的方法是在两种情况下弄乱时间,并决定你准备为简单的程序设计支付多少钱。