使用setGridParam将json数据加载到jqgrid中

使用setGridParam将json数据加载到jqgrid中,jqgrid,Jqgrid,我在使用setGridParam设置jqgrid的url时遇到一些问题 我收到消息:“f未定义” 我的设置: $("#prices").jqGrid({ colModel: [ ... ], pager: jQuery('#pricePager'), ajaxGridOptions: { contentType: "application/json" }, mtype: 'POST', loadonce:

我在使用setGridParam设置jqgrid的url时遇到一些问题

我收到消息:“f未定义”

我的设置:

       $("#prices").jqGrid({
    colModel: [
           ...
        ],
    pager: jQuery('#pricePager'),
    ajaxGridOptions: { contentType: "application/json" },
    mtype: 'POST',
    loadonce: true,
    rowTotal: 100,
    rowNum: -1,
    viewrecords: true,
    caption: "Prices",
    height: 300,
    pgbuttons: false,
    multiselect: true,
    afterInsertRow: function (rowid, rowdata, rowelem) {
        // ...
    },
    beforeSelectRow: function (rowid, e) {
      // ...
    },
    onSelectRow: function (rowid, status) {
       // ...
    }
}); 
获取数据:

$("#prices").setGridParam({ datatype: 'json', page: 1, url: '@Url.Action("GridDataPrices")', postData: JSON.stringify(selections) });

$("#prices").trigger('reloadGrid');
响应是非编码json:

{"total":1,"page":1,"records":100,"rows":[{"id":160602948,"StartDate":"\/Date(1311717600000)\/","Duration":7,"Price":1076.0000,"Code":"code"},{"id":160602950,...}]}
但是,使用firebug,我得到以下消息:

“f未定义”

我首先使用addJSONData实现了这一点,但必须替换它,因为我想保留本地排序


提前感谢。

上传代码后,所有内容都将被清除。您的主要错误如下:

  • 您应该在jqGrid中包含
    数据类型:“local”
    。默认值为“xml”
  • JSON数据具有命名属性,因此必须使用
    jsonReader:{repeatitems:false}
    (有关详细信息,请参阅)
  • colModel
    中使用“ArivalCodeWay”,在JSON数据中使用“ArrivalCodeWay”。因此,您应该修复相应jqGrid列的名称
  • 要从
    “\/date(131284080000)\/”
    格式中解码
    日期
    ,应在相应列中包含
    格式化程序:'date'
  • 以同样的方式,我发现在“持续时间”列中包含
    formatter:'int',sorttype:'int'
    ,在“价格”列中包含
    sorttype:'number',formatter:'number',formattoptions:{decimalPlaces:4000个独立字符:,“}
  • 如果您使用的是
    JSON.stringify
    ,您应该包括,以确保您的代码在所有web浏览器中都能工作

您可以找到经过修改的演示(包括其他一些小改动)。如果单击“单击我”按钮,将加载网格包含的内容。

您可以尝试使用
$(“#prices”).jqGrid('setGridParam',{…})而不是
$(“#价格”).setGridParam({…})。您应该将
rowNum:-1
替换为
rowNum:10000
(一些较大的正数)。另外,我建议您使用
jquery.jqGrid.src.js
而不是
jquery.jqGrid.min.js
,直到没有错误为止。在这种情况下,名称将是可读的(名称“f”表示什么)。此外,我建议您不要使用
afterInsertRow
,而是使用
gridview:true
。它可以显著提高jqGrid的性能。谢谢您的回答。我修改了选项,并使用源文件找到了确切的问题。消息更清楚了:
obj未定义[Break On This Error]ret=obj[expr]。发生这种情况的地方:
getAccessor:function(obj,expr)
。尚未找到原因。函数的参数:expr:“setGridParam”。对象显然是问题所在,但由于这是我第一次研究jQgrid的源代码,所以不太清楚它应该包含什么。删除数据类型选项(
datatype:'json'
)会使错误消失,但数据不会加载到网格中。在哪一行代码中出现错误?您可以在调试器(IE或Visual Studio的开发工具)中看到这一点。方法
getAccessor
将用于两种海豚:1)从服务器响应读取JSON数据2)在
$(“#prices”).jqGrid这样的情况下('setGridParam',…
$.fn.jqGrid
对象中。可能在您的问题中未包含的部分代码中有错误。Oleg,感谢您调查我的问题,非常感谢!主要问题是JsonReader选项不存在。(不知道但我经常使用jqGrid).About'datatype:'local'':我相信我在stackoverflow上的某个地方读到,当loadonce为true时,jqgrid会自动将datatype设置为local。@Brecht:jqgrid会在第一次加载后将
数据类型更改为
'local'
。因此,您不定义
数据类型:'local'
jqgrid会尝试从
获取数据吗e> url
并将其解释为
'xml'
数据。由于数据格式错误,将不会显示任何内容。如果以后需要加载数据,则应手动设置
数据类型:“本地”
。顺便说一句,如果主要问题已解决,则可以将答案标记为“已接受”(有关详细信息,请参阅).Oleg,如果可以的话,我有一个相关的问题。我使用addJsonData来填充网格中的一些数据。这将禁用本地排序。我可以用与上面相同的方法实现这一点,但是我不能在接收到我的数据以及其他组件的一些其他数据时执行服务器调用来获取数据。使用add时是否可以启用本地排序JsonData?我已经读过这方面的内容,但除了设置url和重新加载网格之外,我看不到任何其他解决方案。@布莱希特:如果我理解你的意思是正确的,你就不能修改提供JSON数据的服务器代码。当JSON数据有其他字段时,这不是问题。jqGrid只会得到你在列和igno中定义的字段您可以在单独的问题中更好地描述您的问题。您可以包括从服务器接收到的测试JSON数据和您目前使用的jqGrid。我将尝试回答如何在不使用
addJsonData
的情况下实现填充jqGrid,以便您可以使用本地数据分页、排序和过滤/搜索。