我最近写了一个问题的答案“jqGrid 在更新表/自定义更新时显示默认“正在加载”消息 https://stackoverflow.com/questions/2614643/jqgrid-display-default-loading-message-when-updating-a-table-on-custom-update/”。在写答案时我想:他为什么使用添加JSON数据()用于刷新网格中的数据而不是更改相对于的 URL 的函数设置网格参数()并刷新 jqGrid 数据触发器('重新加载网格')?一开始我想推荐使用'重新加载网格',但经过思考,我明白我不太确定最好的方法是什么。至少,我无法用两句话解释为什么我更喜欢第二种方式。所以我认为这可能是一个有趣的讨论主题。
确切地说:我们有一个典型的情况。我们有一个网页,其中至少有一个 jqGrid 和一些其他控件,例如组合框(选择)、复选框等,这使用户可以更改 jqGrid 中显示的信息范围。通常我们定义一些事件处理程序,例如jQuery("#selector").change(myRefresh).keyup(myKeyRefresh)
我们需要根据用户的选择重新加载 jqGrid 容器。
在读取并分析其他用户输入的信息后,我们可以通过至少两种方式刷新 jqGrid 容器:
- 拨打电话
$.ajax()
手册,然后在成功或完整句柄中$.ajax
call jQuery.parseJSON()
(or eval
)然后调用添加JSON数据jqGrid的功能。我在 stackoverflow.com 上找到了很多使用的示例添加JSON数据.
- Update urljqGrid 根据用户的输入,重置当前page数字为 1 并可选择更改caption网格的。所有这些都可以针对设置网格参数(),并且可选地设置标题()jqGrid 方法。最后调用网格的触发器('重新加载网格')功能。构建url顺便说一句,我主要使用 jQuery.param 函数来确保我已正确包装所有 url 参数编码URI组件.
我希望我们讨论一下这两种方式的优点和缺点。我目前使用第二种方式,所以我将从这种方式的优点开始。
可以说:我调用现有的Web服务,将接收到的数据转换为jqGrid格式并调用添加JSON数据。这就是我使用的原因添加JSON数据 method!
好吧,我会选择其他方式。 jqGrid可以直接调用Web Service并将结果填充到网格中。 jqGrid 有很多选项,允许您自定义此过程。
首先,可以删除或重命名发送到服务器的任何标准参数prmNamesjqGrid 的选项或添加任何更多附加参数postData选项(参见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:选项 http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options)。在 jqGrid 做出相应的操作之前,可以立即修改所有构造的参数$.ajax
通过定义请求序列化GridData()函数(jqGrid 的又一个选项)。不仅如此,人们还可以改变每一项$.ajax
参数通过设置ajaxGrid选项jqGrid 的选项。我用ajaxGridOptions: {contentType: "application/json"}
例如作为一般设置$.jgrid.defaults
.
The ajaxGrid选项选项非常强大。相对于该ajaxGrid选项选项一可以重新定义任何参数$.ajax
通过 jqGrid 发送请求,例如error, complete and 发送前事件。我认为定义可能很有趣数据过滤器事件能够对从服务器返回的行数据进行任何修改。
关于使用的另一个论据触发器('重新加载网格')方式是在 AJAX 请求处理期间阻塞 jqGrid。我主要使用参数loadui: 'block'
在 JSON 请求发送到服务器期间阻止 jqGrid。关于 jQuery blockUI 插件http://malsup.com/jquery/block/ http://malsup.com/jquery/block/可以仅阻止网页的更多部分,如网格。为此,可以调用:
jQuery('#main').block({ message: '<h1>Die Daten werden vom Server geladen...</h1>' });
在致电之前触发器('重新加载网格')方法和jQuery('#main').unblock()在 - 的里面加载完成 and 加载错误功能。这loadui在这种情况下,选项可以设置为“禁用”。
我的最后一句话:我通常使用以下命令创建 jqGriddatatype设置为“local”而不是“json”,我会调用触发('改变')一些控件(组合框之一)的功能,例如:jQuery("#selector").change(myRefresh).keyup(myKeyRefresh).trigger('change')
。
因此我构建了urljqGrid的参数仅在更改句柄内部的一处进行更改datatype到上述内容中的“json”设置网格参数().
所以我不明白为什么这个功能添加JSON数据()应该永远使用。
有人可以使用添加JSON数据()function 向我解释一下它的用法的优点吗?
公平地说,我可以补充一点添加JSON数据()它存在于旧版本的 jqGrid 中,具有我在这里描述的大部分功能。是否应该替换使用添加JSON数据jqGrid 的使用设置网格参数(), and 触发器('重新加载网格')?