使用$ .each对Json数据进行jquery循环

时间:2010-02-26 14:47:21

标签: jquery json foreach

我在名为data的变量中返回了以下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在上面完全正确。如果这有任何不同,我正在使用chrome。将在IE和FF中测试....

编辑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]"

4 个答案:

答案 0 :(得分:282)

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);
});

FOR EDIT 3:

这解决了问题,但不是使用“eval”的想法,你应该看看'/ Cms / GetPages / 123'中的响应如何。

$.get('/Cms/GetPages/123', function(data) {
  $.each(eval(data.replace(/[\r\n]/, "")), function(i, item) {
   alert(item.PageName);
  });​
});

答案 1 :(得分:16)

您是否已将数据从字符串转换为JavaScript对象?

您可以使用data = eval('(' + string_data + ')');或更安全data = JSON.parse(string_data);进行此操作,但稍后仅适用于FF 3.5或包含json2.js

jQuery 1.4.1也具有该功能,$.parseJSON()

但实际上,$.getJSON()应该给你已经解析过的json对象,所以你应该只是彻底检查一切,在某个地方埋没一点点错误,比如你可能忘记在json中引用一些东西,或者其中一个括号不见了。

答案 2 :(得分:4)

只要使用了正确的内容类型,getJSON就会为您评估数据为JSON。确保服务器将数据作为application / json返回。

答案 3 :(得分:3)

$.each(JSON.parse(result), function(i, item) {
    alert(item.number);
});