是否应该将jqGrid的使用addJSONData替换为setGridParam()和trigger('reloadGrid')的用法?

时间:2010-04-17 21:58:27

标签: jquery jqgrid

6 个答案:

答案 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工具栏等问题。