答案 0 :(得分:2)
我一直在使用addJSONData和jqgrid,但是在1年前,很多事情从那时起在jqGrid中发生了变化。
无论如何,我需要沉重的&在客户端进行复杂的gui操作(银行共享东西),我的Json数据只是本地的,并作为一些jkey点(作业完成)发送到服务器。我有几个jqgrid(其中一些在其他jqgrids :-))和某种本地浏览器存储的数据,这些数据足够小,可以留在浏览器中并且复杂且移动到足以在合理的时间内通过ajax IO无法使用。 / p>
第一个版本使用的是Ajax IO,当我遇到锁定和等待问题以及新的复杂GUI事物的数量时,我很高兴找到这个addJSONData钩子并在外面拥有自己的ajax时间轴jQgrid。
答案 1 :(得分:1)
易于从服务器构建网格/数据。我使用JSON的主要原因之一是它比XML小,并且在服务器(PHP)和客户端(JS)方面都运行良好。结果,我将JSON之间的数据传输标准化(我知道其中有几个)。
因此,addJSONData提供了一种简单的方法来不断更新网格中的所有数据,并一次显示它。它快速,快速,脏,并且有效。
然而就个人而言,从长远来看,这将是一个坏主意,大数据网格不断刷新。在那里,在初始获取之后对特定单元/列的更新是更好的想法,有2次调用。将网格更改提交到服务器,并从服务器获取更改。
这样做的一个主要优点是它的快速启动。当数据太大时,add all选项降级为仅在开始时发生一次。虽然可以在初始数据获取后添加单个更新/获取。
它是一个很好的工作周期:快速原型 - >有效的客户端 - 服务器数据网格
答案 2 :(得分:1)
我正在使用addJSONData来提高页面的性能。这是我的用例
页面上有4个jqGrids。所有4个网格的数据检索方法相同,但每个网格中的列和行不同。因此,我没有进行4次服务器调用来填充每个网格中的数据,而是进行一次调用,返回其他3个网格的其他JSON数据。在第一个网格的“loadComplete”事件中,我将每个其他3个网格的数据分开并单独加载它们。这是第一个网格的loadComplete事件的精简版本
loadComplete:function (data) {
//clear and reload area summary table
var areaSummary = data.areaSummary;
jQuery("#areaSummaryTable").jqGrid('clearGridData');
jQuery("#areaSummaryTable")[0].addJSONData(areaSummary);
//clear and reload area total table
var areaTotal = data.areaTotal;
jQuery("#areaTotalTable").jqGrid('clearGridData');
jQuery("#areaTotalTable")[0].addJSONData(areaTotal);
//clear and reload area detail table
jQuery("#detailedAreaTable").jqGrid('clearGridData');
var areaDetail = data.areaDetail;
jQuery("#detailedAreaTable")[0].addJSONData(areaDetail);
}
过去两周一直运行良好,直到今天我注意到在加载页面时,3个网格中的每一个都在向随机URL发出服务器调用。之所以这样,是因为这些网格的数据类型被定义为'json'。如果我将数据类型更改为“本地”,则不会从此网格调用服务器,但上述代码中的addJSONData方法将停止工作。在尝试使用addJSONData之前,我尝试使用“setGridParam”将数据类型更改为“json”,但这也无效。
jQuery("#areaSummaryTable").jqGrid('clearGridData');
jQuery("#areaSummaryTable").jqGrid('setGridParam', {datatype:'json'});
jQuery("#areaSummaryTable")[0].addJSONData(areaSummary);
我希望有一种简单的方法将数据转换为数组并使用addRowData :) 如果有更好的方法来处理这样的用例,请告诉我
答案 3 :(得分:0)
这就是我使用addJSONData()...
的原因就我而言,我有一个页面包含数据网格,另一个页面用于构建搜索条件。
搜索页面对网格页面一无所知,包含七个字段。用户可以填写至少一个或所有七个字段。
提交后,搜索页面将数据格式化为发送到服务器的JSON对象中的键/值对。
在服务器上,JSON数据被解析为SQL WHERE子句。
SQL数据结果作为HTTP响应中的JSON对象发送回客户端,该响应还根据从服务器发送的代码构建网格页面。
据我所知,将HTTP响应中的JSON数据传入网格的唯一方法是使用addJSONData()。
克里斯
答案 4 :(得分:0)
当您需要完全控制ajax的发送方式和时间时,您更愿意使用addJSONData
。
e.g。搜索表单包含两个<select>
框,两者都是ajaxly填充的,第一个select
的值会影响第二个select
。用户可能已为$.Deferred
框设置了默认值。并且您希望仅在定义了两个值后才搜索网格。
然后更可取的是使用local
之类的东西来控制正在进行的ajax调用的顺序和填充。当然,您可以将jqgrid数据设置为json
,然后设置为reloadGrid
,然后设置{{1}}以控制触发。但这不是那种琐事。
答案 5 :(得分:0)
我使用addJSONData方法进行分页,如下所述。
在页面加载时,jqgrid加载了URL返回的JSON数据。 我们需要下一页功能才能工作,但无需切换页面。 即最初,第1页载有10条记录。当我单击Next按钮(NavButton)时,我不想在下一页上加载下10条记录,而是希望所有20条记录都显示在Page 1本身上。
这里,在第二个和后续请求中,我使用的是addJSONData方法。我单击Next按钮进行ajax调用,然后使用addJSONData将json数据附加到现有的10条记录中。 我不能使用setGridParam,因为当我使用它时,最初的10条记录消失了,它只是在同一页面上加载下10条记录。
如果您对此特定功能有任何替代addJSONData,我将很高兴知道。因为我在使用addJSONData加载下一组记录时遇到Subgrid扩展,Filter工具栏等问题。