Jquery jqGrid JSON映射错误
在使用jqGrid和JSON服务器响应时,我似乎在获取正确的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
[
{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();
}
}