Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery jqGrid JSON映射错误_Jquery_Json_Jqgrid - Fatal编程技术网

Jquery jqGrid JSON映射错误

Jquery jqGrid JSON映射错误,jquery,json,jqgrid,Jquery,Json,Jqgrid,在使用jqGrid和JSON服务器响应时,我似乎在获取正确的JSON映射时遇到了问题 例如,我的服务器响应如下所示: [ {ID: 'cmp1', Name: 'Name1', Address: 'Address1', Phone: 'Phone1', Agent: 'Agent1', last_trx: 'last_trx1'}, {ID: 'cmp2', Name: 'Name2', Address: 'Address2', Phone: 'Phone2', Agent

在使用jqGrid和JSON服务器响应时,我似乎在获取正确的JSON映射时遇到了问题

例如,我的服务器响应如下所示:

[
     {ID: 'cmp1', Name: 'Name1', Address: 'Address1', Phone: 'Phone1', Agent: 'Agent1', last_trx: 'last_trx1'}, 
     {ID: 'cmp2', Name: 'Name2', Address: 'Address2', Phone: 'Phone2', Agent: 'Agent2', last_trx: 'last_trx2'}
]
我的jqGrid设置如下所示(用于测试的本地数据类型和本地数据集):

ID、电话和代理都会显示(因为它们的数据源名称完全相同)。但是,公司名称、位置和上次加载都不会显示。我认为使用
jsonmap
jsonReader:{repeatitems:false}
可以使JSON对象的名称与
colNames
对象的名称不同

我们将不胜感激

更新 很抱歉更新太晚。这就是代码在测试后的外观_rows是JSON对象的数组

var noRecords = $('<div>No results for the entered company name.</div>');
        grid.jqGrid({
            datatype: 'local',
            colNames: ['ID', 'Company Name', 'Location', 'Phone', 'Agent', 'Last Load'], 
            colModel: [
                {name: 'ID', jsonmap: 'ID', width: 75}, 
                {name: 'Company Name', jsonmap: 'Name', width: 150}, 
                {name: 'Location', jsonmap: 'Address', width: 150}, 
                {name: 'Phone', jsonmap: 'Phone', width: 125, align: 'center'}, 
                {name: 'Agent', jsonmap: 'Agent', width: 150}, 
                {name: 'Last Load', jsonmap: 'last_trx', width: 150}
            ], 
            loadonce: true, 
            shrinkToFit: false, 
            width: 600, 
            rowNum: 20, 
            rowList: [10, 20, 30, 40, 50, 100], 
            repeatitems: false, 
            jsonReader: { repeatitems: false, id: '0' }, 
            pager: '#companies_pager', 
            caption: 'Company List', 
            loadComplete: function() {
                if(grid[0].p.reccount === 0) {
                    noRecords.show();
                }
                else {
                    noRecords.hide();
                }
            }
        });
/* Get the list of companies based on the search criteria */
function getCompanies() {
    var company = document.getElementById('company').value;
    if((company != '') && (company != oldCompany)) {
        oldCompany = company;
        myAjax('get', {method: 'getCompanies', a: 'companies', data: company}, callbackGetCompanies);
    }
}
/* Parse the server response */
function callbackGetCompanies(_data) {
    if(_data && _data.message) {
        if(_data.message == 'true') {
            grid.jqGrid('clearGridData').jqGrid('setGridParam', {data: _data.rows, page: 1}).trigger('reloadGrid');
        }
        else {
            dialog(_data.message);
        }
    }
    else {
        serverError();
    }
}
var noRecords=$(“输入的公司名称没有结果”);
grid.jqGrid({
数据类型:“本地”,
colNames:['ID','Company Name','Location','Phone','Agent','Last Load'],
colModel:[
{name:'ID',jsonmap:'ID',宽度:75},
{name:'Company name',jsonmap:'name',width:150},
{name:'Location',jsonmap:'Address',width:150},
{name:'Phone',jsonmap:'Phone',宽度:125,对齐:'center'},
{name:'Agent',jsonmap:'Agent',宽度:150},
{name:'Last Load',jsonmap:'Last_trx',宽度:150}
], 
有一次:是的,
shrinkToFit:错,
宽度:600,
rowNum:20,
行列表:[10,20,30,40,50,100],
重复项:false,
jsonReader:{repeatitems:false,id:'0'},
寻呼机:“#公司"寻呼机”,
标题:“公司名单”,
loadComplete:function(){
if(网格[0].p.reccount==0){
noRecords.show();
}
否则{
noRecords.hide();
}
}
});
/*根据搜索条件获取公司列表*/
职能(公司){
var company=document.getElementById('company')。值;
如果((公司!=“”)和&(公司!=旧公司)){
oldCompany=公司;
myAjax('get',{method:'getcompanys',a:'companys',data:company},callbackgetcompanys);
}
}
/*解析服务器响应*/
函数callbackgetcompanys(_数据){
如果(_data&&u data.message){
如果(_data.message==“true”){
jqGrid('clearGridData').jqGrid('setGridParam',{data:_data.rows,page:1}).trigger('reloadGrid');
}
否则{
对话框(_data.message);
}
}
否则{
serverError();
}
}

在演示中,您有多个问题

  • 如果使用
    datatype:“local”
    data
    参数中的输入数据将由而不是
    jsonReader
    管理。顺便说一下,
    localReader
    repeatitems
    的值已经为false。所以正确的做法是使用
    localReader:{id:'id'}
  • 如果使用
    datatype:'local'
    将忽略
    loadonce:true
    选项,因为数据已经是本地数据,不应从服务器加载一次
  • 如果使用
    数据类型:“local”
    jsonmap
    将被忽略。该属性仅在
    datatype:'json'
    datatype:'jsonstring'
    的情况下使用
  • 如果使用
    数据类型:“local”
    索引
    属性的值必须与
    名称
    属性的值相同。只有在这种情况下,本地排序才能正常工作
  • 您不应在
    name
    属性内使用空格
    '
    。“否”不能位于
    名称
    属性的内部
  • 因此,您必须在
    数据
    数组中使用
    名称

    colModel:[
    {name:'ID',index:'ID',宽度:75},
    {name:'name',index:'name',宽度:150},
    {名称:'地址',索引:'地址',宽度:150},
    {名称:'Phone',索引:'Phone',宽度:125,对齐:'center'},
    {name:'Agent',index:'Agent',宽度:150},
    {名称:'last_trx',索引:'last_trx',宽度:150}
    ],
    localReader:{id:'id'},
    

    我看不出有什么理由需要在输入数据中使用
    name
    property other。

    我现在已经更新了我的帖子,展示了它的实际使用方式。使用此选项,将不会有实际的
    数据类型:“local”
    use。重新加载网格时,
    数据类型将更改为json。我认为
    colModel
    name
    选项应该是
    colNames
    数组中相应的名称,这是不是不正确?@Kyle:我仍然不明白的是:为什么要使用
    myAjax
    datatype:'local'
    而不是直接从服务器?
    name
    选项是列的自由标识符。在许多情况下,它将用于构造ID。因此,它的名称应该与id命名规则相对应。如果您使用命名属性作为输入,那么对于
    数据类型:“local”
    您应该选择与输入数据中相同的
    name
    属性。如果您使用
    datatype:'json'
    您可以使用
    jsonmap
    ,它描述了如何从数据的输入项中获取列的值。@Kyle:不客气!jqGrid有两个回调:
    loadComplete
    在服务器响应成功时调用,而
    loadError
    在错误时调用。带有错误消息的服务器响应的格式与成功的服务器响应完全不同。您应该在服务器响应中设置任何错误HTTP代码。有关详细信息,请参阅。@Kyle:<
    var noRecords = $('<div>No results for the entered company name.</div>');
            grid.jqGrid({
                datatype: 'local',
                colNames: ['ID', 'Company Name', 'Location', 'Phone', 'Agent', 'Last Load'], 
                colModel: [
                    {name: 'ID', jsonmap: 'ID', width: 75}, 
                    {name: 'Company Name', jsonmap: 'Name', width: 150}, 
                    {name: 'Location', jsonmap: 'Address', width: 150}, 
                    {name: 'Phone', jsonmap: 'Phone', width: 125, align: 'center'}, 
                    {name: 'Agent', jsonmap: 'Agent', width: 150}, 
                    {name: 'Last Load', jsonmap: 'last_trx', width: 150}
                ], 
                loadonce: true, 
                shrinkToFit: false, 
                width: 600, 
                rowNum: 20, 
                rowList: [10, 20, 30, 40, 50, 100], 
                repeatitems: false, 
                jsonReader: { repeatitems: false, id: '0' }, 
                pager: '#companies_pager', 
                caption: 'Company List', 
                loadComplete: function() {
                    if(grid[0].p.reccount === 0) {
                        noRecords.show();
                    }
                    else {
                        noRecords.hide();
                    }
                }
            });
    /* Get the list of companies based on the search criteria */
    function getCompanies() {
        var company = document.getElementById('company').value;
        if((company != '') && (company != oldCompany)) {
            oldCompany = company;
            myAjax('get', {method: 'getCompanies', a: 'companies', data: company}, callbackGetCompanies);
        }
    }
    /* Parse the server response */
    function callbackGetCompanies(_data) {
        if(_data && _data.message) {
            if(_data.message == 'true') {
                grid.jqGrid('clearGridData').jqGrid('setGridParam', {data: _data.rows, page: 1}).trigger('reloadGrid');
            }
            else {
                dialog(_data.message);
            }
        }
        else {
            serverError();
        }
    }