JSON数据使用$ .each jQuery的循环
我有一个名为data的variables返回下面的JSON。
这是返回的JSON
[ {"Id": 10004, "PageName": "club"}, {"Id": 10040, "PageName": "qaz"}, {"Id": 10059, "PageName": "jjjjjjj"} ]
我试图循环使用$ .each的集合,但我遇到了问题,警报显示未定义。 我已经尝试了很多不同的语法,但似乎无法弄清楚这一点。
我正在使用的JQuery是
$.each(data, function(i, item) { alert(item.PageName); });
任何一个人都能指出我的方向吗?
编辑这是我用来抓取数据的代码
$.getJSON('/Cms/GetPages/123', null, function(data) { fillSelect(data); });
这是在回叫时被调用的函数
function fillSelect(data) { alert(data); $.each(data, function(i, item) { alert(item.PageName); }); }
编辑2这有点让我困惑,根据文档应该工作,因为我有它,但事实并非如此。 根据小提琴手的标题显示:
Content-Type: application/json; charset=utf-8
和JSON在上面是完全正确的。 如果这使得任何不同,我使用铬。 将在IE和FFtesting….
编辑3
使用$ .get生成
"[\r\n {\r\n \"Id\": 10041,\r\n \"PageName\": \"01234567890\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10001,\r\n \"PageName\": \"about\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10056,\r\n \"PageName\": \"fdgdfgdfg\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10052,\r\n \"PageName\": \"hjkhjk\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10059,\r\n \"PageName\": \"jjjjjjj\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10057,\r\n \"PageName\": \"qqqqq\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10054,\r\n \"PageName\": \"qwqw\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n }\r\n]"
var data = [ {"Id": 10004, "PageName": "club"}, {"Id": 10040, "PageName": "qaz"}, {"Id": 10059, "PageName": "jjjjjjj"} ]; $.each(data, function(i, item) { alert(data[i].PageName); }); $.each(data, function(i, item) { alert(item.PageName); });
这两个选项工作得很好,除非你有这样的东西:
var data.result = [ {"Id": 10004, "PageName": "club"}, {"Id": 10040, "PageName": "qaz"}, {"Id": 10059, "PageName": "jjjjjjj"} ]; $.each(data.result, function(i, item) { alert(data.result[i].PageName); });
编辑:
试着用这个来描述结果
$.get('/Cms/GetPages/123', function(data) { alert(data); });
编辑3:
这纠正了问题,但不是使用“eval”的想法,你应该看看'/ Cms / GetPages / 123'中的响应如何。
$.get('/Cms/GetPages/123', function(data) { $.each(eval(data.replace(/[\r\n]/, "")), function(i, item) { alert(item.PageName); }); });
你是否将数据从string转换为JavaScript对象?
你可以用data = eval('(' + string_data + ')');
来做到这一点data = eval('(' + string_data + ')');
或者,更安全, data = JSON.parse(string_data);
但以后只能在FF 3.5或者包含json2.js
jQuery自1.4.1以来也有这个function, $.parseJSON()
。
但实际上, $.getJSON()
应该会给你已经parsing过的json对象,所以你应该彻底检查一切,在某个地方埋没了一点错误,就像你可能忘记在json中引用某个东西,或者其中一个括号丢失了一样。
只要使用正确的内容types,getJSON就会为您评估数据为JSON。 确保服务器以application / json的forms返回数据。