代码之家  ›  专栏  ›  技术社区  ›  Oleg

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

  •  28
  • Oleg  · 技术社区  · 14 年前

    jqGrid display default “loading” message when updating a table / on custom update ". 在写答案的时候我想:他为什么要用 添加数据() 函数用于刷新网格中的数据,而不是根据 刷新jqGrid数据 ? 一开始我想推荐使用 ,但经过思考,我明白我不太确定什么是最好的方法。至少,我不能用两句话来解释为什么我更喜欢第二种方式。所以我决定这是一个有趣的话题。

    准确地说,我们有一个典型的情况。我们有一个网页,其中至少有一个jqGrid和一些其他控件,如组合框(select)、复选框等,这些控件允许用户更改jqGrid中显示的信息的范围。通常我们定义一些事件处理程序,比如 jQuery("#selector").change(myRefresh).keyup(myKeyRefresh) 我们需要根据用户的选择重新加载jqGrid容器。

    1. 召唤 $.ajax() 然后在手册里面成功或完成处理 $.ajax 呼叫 jQuery.parseJSON() eval )然后打电话 添加数据 jqGrid的功能。我发现了很多关于stackoverflow.com网站什么用途 添加数据
    2. 网址 页码 标题 ,以及可选的 设置标题() 触发器('重新加载网格') 网址 ,顺便说一句,我通常用jQuery.param函数来确定,我已经正确打包了所有关于 编码器组件

    我想让我们讨论一下这两种方法的利弊。我现在使用第二种方法,所以我将从这一种方法的优点开始。

    可以这样说:我调用现有的Web服务,将接收到的数据转换为jqGrid格式并调用 . 这就是我为什么使用

    好的,我会选择另一种方式。jqGrid可以直接调用Web服务并在网格内填充结果。有很多jqGrid选项,允许您定制这个过程。

    项目名称 邮政数据 选项(请参见 http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options ). 可以在jqGrid生成相应的参数之前立即修改所有构造的参数 $.ajax版 序列化GridData() 函数(jqGrid的另一个选项)。不仅如此,每个人都可以改变 通过设置 ajaxGridOptions选项 jqGrid选项。我使用 ajaxGridOptions: {contentType: "application/json"} 例如,作为 $.jgrid.defaults . ajaxGridOptions选项 选择权非常强大。关于 选项一可以重新定义 $.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>' });
    

    在呼叫 触发器('重新加载网格') 方法和 jQuery('#main').unblock() 功能。这个 加载用户界面

    最后我要说的是:我经常用 数据类型 设置为'local'而不是'json',我将调用 一些控件(其中一个组合框)的功能如下: jQuery("#selector").change(myRefresh).keyup(myKeyRefresh).trigger('change') . 因此我构建了 jqGrid的参数只在更改句柄内的一个位置并更改 在上面描述的“json”中 setGridParam() .

    添加数据()

    谁能用 添加数据() 函数向我解释一下它的使用优势?

    它存在于jqGrid的旧版本中,因为它具有我在这里描述的大多数特性。是否应该用 添加数据 jqGrid的 setGridParam() ,和

    6 回复  |  直到 7 年前
        1
  •  2
  •   regilero    13 年前

    我一直在jqgrid中使用addJSONData,但那是1年前的事了,从那时起jqgrid发生了很多变化。

    jkey的Json操作完成了(我只需要在本地服务器上完成一些复杂的操作)。我有几个jqgrid(其中一些位于其他jqgrids:-)和某种本地浏览器存储的数据,这些数据足够小,可以留在浏览器中,而且非常复杂,可以通过ajax IO在合理的时间内无法使用。

        2
  •  1
  •   PicoCreator    13 年前

    易于从服务器构建网格/数据。我使用JSON的一个主要原因是它比XML小,并且在服务器端(PHP)和客户端(JS)都能很好地工作。因此,我将这两者之间的数据传输标准化(据我所知,有几家这样做)。

    因此,addJSONData提供了一种简单的方法来不断更新网格中的所有数据,并一次性显示出来。它快,快,脏,而且有效。

    然而就个人而言,随着大型数据网格不断刷新,从长远来看,这将是一个坏主意。在这里,在初始get之后更新特定的单元格/列,最好是有两个调用。向服务器提交网格更改,并从服务器获取更改。

    所以这样做的一个主要优点是,这是一个快速的开始。当数据变得太大时,addall选项在开始时只会降级一次。在初始数据抓取之后,可以添加单独的update/get。

    这是一个很好的工作周期:快速原型->有效的客户机-服务器数据网格

        3
  •  1
  •   RRK    11 年前

    我使用addJSONData来提高页面的性能。这是我的用例

     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);
        }
    

    在过去的2周里,这个功能一直很好,直到今天,我注意到在页面加载时,3个网格中的每一个都在对一个随机的URL进行服务器调用。这是因为这些网格的数据类型被定义为“json”。如果我将datatype更改为'local',就不会从这个网格进行服务器调用,但是上面代码中的addJSONData方法将停止工作。在使用下面的addJSONData之前,我尝试使用“setGridParam”将数据类型更改为“json”,但这也不起作用。

            jQuery("#areaSummaryTable").jqGrid('clearGridData');
            jQuery("#areaSummaryTable").jqGrid('setGridParam', {datatype:'json'});
            jQuery("#areaSummaryTable")[0].addJSONData(areaSummary);
    

    我希望有一种简单的方法将数据转换为数组并使用addRowData:) 如果有更好的方法来处理这样的用例,请告诉我

        4
  •  0
  •   user43244    14 年前

    下面是我使用addJSONData()的原因。。。

    在我的例子中,有一个页面包含数据网格,另一个页面用于构建搜索条件。

    提交时,搜索页面将数据格式化为发送到服务器的JSON对象中的键/值对。

    SQL数据结果作为HTTP响应中的JSON对象发送回客户端,该响应还根据服务器发送的代码构建网格页面。

    据我所知,从HTTP响应获取JSON数据到网格的唯一方法是使用addJSONData()。

    克里斯

        5
  •  0
  •   jackysee    12 年前

    当您需要完全控制ajax的发送方式和发送时间时,您最好使用 addJSONData .

    e、 一个搜索表单包含两个 <select> select 会影响到第二个。用户可能已为 选择

    这样更可取的方法是使用 $.Deferred local 然后到 json ,然后 reloadGrid 控制触发。但这并不是那么无聊。

        6
  •  0
  •   amrutaas    11 年前

    jjson通过加载页面返回jjson数据。 我们需要下一页功能来工作,但不必切换页面。 i、 最初,第1页加载了10条记录。当我点击Next按钮(NavButton)时,我不想在下一页加载接下来的10条记录,而是希望所有20条记录都显示在第1页上。

    在这里,对于第二个和随后的请求,我使用addJSONData方法。我在单击Next按钮时发出ajax调用,然后使用addJSONData将json数据附加到现有的10条记录中。

    如果您有任何替代addJSONData来实现这个特定的功能,我很乐意知道。当使用addjsonddata加载下一组记录时,我面临子网格扩展、过滤器工具栏等问题。