Jquery 从JSON到jqGrid获取数据
我正在尝试从以下位置获取Jquery 从JSON到jqGrid获取数据,jquery,json,jqgrid,Jquery,Json,Jqgrid,我正在尝试从以下位置获取数据: jQuery(document).ready(function() { var mydata; $.getJSON('@Url.Action("GetJsonData", "Home")', function(data) { datatype: 'json', mydata = data; // alert(mydata); }); 到我的j
数据
:
jQuery(document).ready(function() {
var mydata;
$.getJSON('@Url.Action("GetJsonData", "Home")', function(data) {
datatype: 'json',
mydata = data;
// alert(mydata);
});
到我的jqGrid
:
$("#grid").jqGrid({
datastr: data,
datatype: 'json',
width: '100%',
colNames: ["Seq ID", "Fund ID", "Name", "Fund", "Bonus", "Allocation", "Blank", "Begin", "End"],
colModel: [
{
name: 'seqid',
index: 'seqid',
editable: true,
}, {
name: 'fund id',
index: 'fund id',
editable: true,
}, {
name: 'name',
index: 'name',
editable: true,
}, {
name: 'fund',
index: 'fund',
editable: true,
}, {
name: 'bonus',
index: 'bonus',
editable: true,
}, {
name: 'allocation',
index: 'allocation',
editable: true,
}, {
name: 'blank',
index: 'blank',
editable: true,
}, {
name: 'begin',
index: 'begin',
editable: true,
}, {
name: 'end',
index: 'end',
editable: true,
}
],
pager: '#pager',
'cellEdit': true,
'cellsubmit': 'clientArray',
editurl: 'clientArray'
});
数据如下所示:
{
"FUND_SEQ_ID": 1.0,
"FUND_ID": 23,
"FUND_NM": "INSTITUTIONAL",
"FUND_TICKER_NM": "TINXX",
"FUND_SALARY_IND": "A",
"FUND_BONUS_IND": "N",
"FUND_ALCTN_IND": "\u0000", <- This should be null
"BEG_DT": "20140101",
"END_DT": "24000101"
},
在我看来(Index.cshtml
),我在jQGrid
的url
中调用该方法
$(document).ready(function() {
jQuery("#grid").jqGrid({
url: '@Url.Action("GetAssociateFromDb", "Home")',
datatype: "json",
width: '100%',
colNames: ["Seq ID", "Fund ID", "Name", "Fund", "Salary", "Bonus", "Allocation", "Begin", "End"],
colModel: [
{ name: "FUND_SEQ_ID" },
{ name: "FUND_ID" },
{ name: "FUND_NM" },
{ name: "FUND_TICKER_NM" },
{ name: "FUND_SALARY_IND" },
{ name: "FUND_BONUS_IND" },
{ name: "FUND_ALCTN_IND" },
{ name: "BEG_DT" },
{ name: "END_DT" }
],
cmTemplate: { editable: true },
// data: JSON.parse(data), // Load Data
rowNum: 10, // Total records to show at a time by default
loadonce: true,
rowList: [10, 20], // For Paging
pager: '#pager',
jsonReader: {
repeatitems: false,
page: function () { return 1; }, // This was necessary.
root: function (obj) { return obj; },
records: function (obj) { return obj.length; }
},
viewrecords: true,
gridview: true,
autowidth: true,
height: 'auto',
hoverrows: true,
caption: "List of Funds"
});
});
根据@Oleg所说的,您应该删除
jQuery(document)上的函数。准备好并在jqGrid上设置此选项:
$("#grid").jqGrid({
url: '@Url.Action("GetJsonData", "Home")',
datatype: "json",
width: '100%',
// and so on
...
});
您的数据格式是否可以更改?最好的方法是根据需要从服务器获取,例如:
{
"totalpages": "xxx",
"currpage": "yyy",
"totalrecords": "zzz",
"invdata" : [
{"id" :"1", "cell" :["1.0", "23", "INSTITUTIONAL MONEY MARKET FUND", ...]},
{"id" :"2", "cell" :["cell21", "cell22", "cell23"]},
...
]
}
如果您不能-您仍然可以将数据更改为一些“新数据”,因此它将采用上述格式(取自
如果您仍然选择继续使用代码,请考虑以下内容:
colModel: [
{ name: "FUND_SEQ_ID" },
{ name: "FUND_ID" },
{ name: "FUND_NM" },
{ name: "FUND_TICKER_NM" },
{ name: "FUND_SALARY_IND" },
{ name: "FUND_BONUS_IND" },
{ name: "FUND_ALCTN_IND" },
{ name: "BEG_DT" },
{ name: "END_DT" }
],
cmTemplate: {editable: true},
datastr—当datatype参数设置为xmlstring或jsonstring时的数据字符串
(摘自)
您的数据类型是“json”
希望这会对您有所帮助。我看到的主要问题是列的命名与输入JSON数据中的不一样。请尝试将colModel
替换为以下内容:
colModel: [
{ name: "FUND_SEQ_ID" },
{ name: "FUND_ID" },
{ name: "FUND_NM" },
{ name: "FUND_TICKER_NM" },
{ name: "FUND_SALARY_IND" },
{ name: "FUND_BONUS_IND" },
{ name: "FUND_ALCTN_IND" },
{ name: "BEG_DT" },
{ name: "END_DT" }
],
cmTemplate: {editable: true},
选项cmTemplate
允许您在colModel
中设置公共属性。我建议您在所有网格中也使用gridview:true
和autoencode:true
此外,您还可以使用
url: '@Url.Action("GetJsonData", "Home")',
datatype: "json",
loadonce: true
而不是使用$.getJSON
loadonce: true,
jsonReader: {
repeatitems: false,
root: function (obj) { return obj; },
page: function (obj) { return grid.jqGrid('getGridParam', 'page'); },
total: function (obj) { return Math.ceil(obj.length /
grid.jqGrid('getGridParam', 'rowNum')); },
records: function (obj) { return obj.length; }
},
在你的$(“#grid”).jqGrid调用中也添加此项。问题中包含的数据不是项目的数组。你真的试图以这种方式使用jqGrid,还是只是没有包含服务器的完整响应?为什么不使用url:'@url.Action(“GetJsonData”,“Home”)
和数据类型:“json”
?这是填充网格数据的最标准的方法。感谢@Oleg的评论。我尝试过了,但网格仍然是空的。数据实际上是一个数组。它看起来像提供的示例,但有10条附加记录包装在[]
。查看我更新的代码。它正在使IE崩溃。你看到什么错误了吗?我按照你说的做了,我删除了url:
,并将数据类型更改为local
你所说的“它正在使IE崩溃”是什么意思?错误是什么?“停止运行此脚本?此页面上的脚本导致您的web浏览器运行缓慢,如果继续运行,您的计算机可能会无响应。”它加载了表,但没有数据。我已更新了我的日志,我希望它是动态的(从数据库/live feed),这就是我不使用静态数据的原因。我确实尝试了datastr
方法,但不幸的是,它对我不起作用。网格中没有数据。谁谈到了静态数据?当然,你希望它可以动态更改。那么,为什么不使用“url”并从服务器获取上述格式呢?(如简单的演示示例).我错过了什么?我不知道你在说什么。对不起。谢谢你的回答。我完全按照你说的做了..但仍然没有数据?没有错误或任何东西,只是没有数据。@Current:不客气!我想你的代码中犯了一些错误。请看和。第一个演示使用数据类型:“jsonstring”“
第二个使用数据类型:“json”
并从服务器加载数据。这两个演示都能工作。你应该将演示的代码与你的代码进行比较,你应该会发现错误。再次感谢你的演示。我已经尝试过你的方法,它能工作。我想我的问题是$(“#网格”).jqGrid({url:'@url.Action(“GetJsonData”),“Home”)、数据类型:“json”、loadonce:true、
…太糟糕了,我不能使用alert(@Url.Action…);
我们可以在其他地方继续讨论吗?@current:你必须替换return serializer.Serialize(rows);
到return rows;
在GetAssociateFromDB
中。问题是返回json(jsonData,JsonRequestBehavior.AllowGet);
进行JSON序列化。如果序列化对象,则反序列化的数据也将是客户端的对象。如果使用字符串(与当前一样)然后,该字符串也将在客户端反序列化为字符串,处理将失败。因此,当前错误出现在服务器代码中。您将看到\“
而不是“
在服务器响应中。这个问题真是个老问题。没有必要添加您的答案。我花了一天时间解决了这个问题。无论是旧的还是新的,这都可以帮助任何人。