我最近写了一个回答“jqGrid display default “loading” message when updating a table / on custom update”的问题。在写答案时,我想:为什么他使用 addJSONData() 函数刷新网格中的数据,而不是更改关于 setGridParam() 的 URL 并刷新关于 trigger('reloadGrid') 的 jqGrid 数据?一开始我想推荐使用“reloadGrid”,但在考虑之后我明白我不太确定最好的方法是什么。至少,我无法用两句话解释为什么我更喜欢第二种方式。所以我决定这可能是一个有趣的讨论主题。
所以确切地说:我们有一个典型的情况。我们有一个网页,其中至少有一个 jqGrid 和一些其他控件,如组合框(选择)、复选框等,这些控件使用户可以更改 jqGrid 中显示的信息范围。通常我们定义一些事件处理程序,如 jQuery("#selector").change(myRefresh).keyup(myKeyRefresh)
我们需要根据用户的选择重新加载 jqGrid 容器。
在读取和分析来自其他用户输入的信息后,我们至少可以通过两种方式刷新 jqGrid 容器:
$.ajax()
手动然后里面的成功或完整句柄 $.ajax
调用 jQuery.parseJSON()
(或 eval
)然后调用 jqGrid 的 addJSONData 函数。我在 stackoverflow.com 上找到了很多使用 addJSONData 的例子。 我希望我们讨论两种方式的优缺点。我目前使用第二种方式,所以我将从这种方式的优点开始。
可以说:我调用现有的Web Service,将接收到的数据转换为jqGrid格式并调用addJSONData。这就是我使用 addJSONData 方法的原因!
好的,我会选择另一种方式。 jqGrid 可以直接调用Web Service 并将结果填充到网格内。有很多 jqGrid 选项,允许您自定义此过程。
首先,可以删除或重命名发送到服务器的任何关于 的标准参数。 prmNames jqGrid 选项或添加更多关于 的附加参数后数据选项(见 http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options)。可以在 jqGrid 生成相应的
$.ajax
之前立即修改所有构造的参数。通过定义 serializeGridData() 函数(jqGrid 的另一个选项)来请求。不仅如此,每个$.ajax
都可以改变。参数通过设置 ajaxGridOptions jqGrid 的选项。我用 ajaxGridOptions: {contentType: "application/json"}
例如作为 $.jgrid.defaults
的一般设置.ajaxGridOptions 选项非常强大。关于 ajaxGridOptions 选项一可以重新定义
$.ajax
的任何参数请求由 jqGrid 发送,如错误、完成和 beforeSend 事件。我认为定义 dataFilter 事件可能很有趣,以便能够对从服务器返回的行数据进行任何修改。使用 trigger('reloadGrid') 方式的另一个论据是在 AJAX 请求处理期间阻塞 jqGrid。大多数情况下,我使用参数
loadui: 'block'
在 JSON 请求发送到服务器期间阻止 jqGrid。关于 jQuery blockUI 插件 http://malsup.com/jquery/block/一个可以只将网页的更多部分作为网格来阻止。要做到这一点,可以调用:jQuery('#main').block({ message: '<h1>Die Daten werden vom Server geladen...</h1>' });
在调用 loadComplete 和 loadError 函数中的 trigger('reloadGrid') 方法和 jQuery('#main').unblock() 之前。 loadui 在这种情况下,可以将选项设置为“禁用”。
我的最后一句话:主要是我用 创建 jqGrid数据类型 设置为 'local' 而不是 'json',我会调用一些控件(组合框之一)的 trigger('change') 函数,例如:
jQuery("#selector").change(myRefresh).keyup(myKeyRefresh).trigger('change')
.因此我构造了 网址 jqGrid 的参数仅在更改句柄内部的一处更改 数据类型 到上述 setGridParam() 中的“json”。
所以我不明白为什么应该使用 addJSONData() 函数。
使用 addJSONData() 函数的人可以向我解释其使用的优点吗?
公平地说,我可以添加存在于旧版本 jqGrid 中的 addJSONData() ,因为它具有我在此处描述的大部分功能。是否应该将 jqGrid 的 addJSONData 的用法替换为 setGridParam() 和 trigger('reloadGrid') 的用法?
最佳答案
我一直在将 addJSONData 与 jqgrid 一起使用,但那是 1 年前,从那时起 jqGrid 发生了很多变化。
无论如何,我需要在客户端进行大量复杂的 gui 操作(银行共享的东西),我的 Json 数据仅在本地并作为某个 jkey 点发送到服务器(工作完成)。我有几个 jqgrid(其中一些在其他 jqgrids 中 :-) )和某种本地浏览器数据存储,这些数据小到足以留在浏览器中,并且复杂且移动到足以在合理的时间内通过 ajax IO 无法使用。
第一个版本使用 Ajax IO,当我遇到锁定和等待问题以及新的复杂 GUI 事物的数量时,我真的很高兴找到这个 addJSONData 钩子(Hook)并在 jQgrid 之外拥有自己的 ajax 时间线。
关于jquery - 是否应该将 jqGrid 的 addJSONData 的用法替换为 setGridParam() 的用法,并触发 ('reloadGrid' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2660226/