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返回数据。