当数据类型为json时,jqGrid不获取行数据,但当数据类型为local时,jgGrid正常工作。

时间:2012-11-12 15:04:50

标签: jquery jqgrid

我正在尝试两个版本的代码,一个是本地数据类型,另一个是json数据类型。我要做的就是使用此行console.log(texts)将数据打印到控制台日志。但是,仅当数据类型为本地时才会打印到控制台。下面是代码的两个版本,本地数据类型和json数据类型。两个版本都相似,只更改了dataTypes。我最后打电话给someFunc来打印数据

本地数据类型

$(document).ready(function() {
    var mydata = [
     {id: "1", name: "someone"}
    ]
    someFunc = function(columnName) {
         var texts = jQuery("#myGrid").jqGrid('getCol',columnName);
         console.log(texts); //is printing only when datatype is local
    };
    jQuery("#myGrid").jqGrid(
        {
            autoencode:true,
            mtype: 'GET',
            datatype : 'local',
            data: mydata,                   
            colModel : [ 
                {name: 'name', index: 'Name'}
            ]
    });
    jQuery("#mygrid").jqGrid('navGrid', '#pager', {
        edit : false,
        add : false,
        del : false,
        search : true
    }, {}, {}, {}, {
        sopt : [ 'eq', 'ne', 'lt', 'gt', 'cn', 'bw', 'ew' ],
        closeOnEscape : true,
        multipleSearch : true,
        closeAfterSearch : true
    });   
    someFunc('name');
});     

Json数据类型

$(document).ready(function() {
    someFunc = function(columnName) {
         var texts = jQuery("#myGrid").jqGrid('getCol',columnName);
         console.log(texts); //is printing only when datatype is local
    };
    jQuery("#myGrid").jqGrid(
        {
            url : 'someUrlToGetData',
            autoencode:true,
            mtype: 'GET',
            datatype: 'json',

            colModel : [ 
                {name: 'name', index: 'Name'}
            ]
    });
    jQuery("#mygrid").jqGrid('navGrid', '#pager', {
        edit : false,
        add : false,
        del : false,
        search : true
    }, {}, {}, {}, {
        sopt : [ 'eq', 'ne', 'lt', 'gt', 'cn', 'bw', 'ew' ],
        closeOnEscape : true,
        multipleSearch : true,
        closeAfterSearch : true
    });   
    someFunc('name');
});     

1 个答案:

答案 0 :(得分:1)

您应该包含来自网址'someUrlToGetData'的服务器响应。此外,您应该在分配变量someFunc之前声明它:var someFunc = function(columnName) { ... };

对于您的主要问题:如果服务器正确生成jqGrid的JSON数据(请参阅the documentation),那么您应该在someFunc('name');回调中调用loadComplete

jQuery("#myGrid").jqGrid({
    url : 'someUrlToGetData',
    autoencode:true,
    mtype: 'GET',
    datatype: 'json',
    colModel : [ 
        {name: 'name', index: 'Name'}
    ],
    gridview: true,
    loadComplete: function () {
        someFunc('name');
    }
});

问题是代码是异步工作的。如果您创建了具有datatype: "json"的网格,那么将对jqGrid的url选项指定的URL进行Ajax调用。