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

Rip*_*ppo 154 foreach jquery json

我在一个名为data的变量中返回了以下JSON.

这是回归的JSON ......

[ 
{"Id": 10004, "PageName": "club"}, 
{"Id": 10040, "PageName": "qaz"}, 
{"Id": 10059, "PageName": "jjjjjjj"}
]
Run Code Online (Sandbox Code Playgroud)

我试图使用$ .each遍历集合,但我遇到的问题是警报显示未定义.我尝试了很多不同的语法,但似乎无法解决这个问题.

我正在使用的JQuery是

$.each(data, function(i, item) {
    alert(item.PageName);
});
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出我正确的方向吗?

编辑 这是我用来获取数据的代码

$.getJSON('/Cms/GetPages/123', null, function(data) {
  fillSelect(data);
});
Run Code Online (Sandbox Code Playgroud)

这是在回叫时调用的函数

function fillSelect(data) {
  alert(data);
  $.each(data, function(i, item) {
    alert(item.PageName);
  });
}
Run Code Online (Sandbox Code Playgroud)

编辑2 这有点令我困惑,根据它应该工作的文档,但它没有.根据提琴手的标题显示: -

Content-Type: application/json; charset=utf-8
Run Code Online (Sandbox Code Playgroud)

并且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]"
Run Code Online (Sandbox Code Playgroud)

and*_*lzo 290

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);
});
Run Code Online (Sandbox Code Playgroud)

这两个选项效果很好,除非你有类似的东西:

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);
});
Run Code Online (Sandbox Code Playgroud)

编辑:

试试这个并描述结果

$.get('/Cms/GetPages/123', function(data) {
  alert(data);
});
Run Code Online (Sandbox Code Playgroud)

编辑3:

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

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


vav*_*ava 16

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

您可以使用data = eval('(' + string_data + ')'); 或更安全,data = JSON.parse(string_data);但稍后只能在FF 3.5中使用,或者如果包含json2.js

自1.4.1以来jQuery也有这个功能,$.parseJSON().

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

  • 那应该是`data = eval('('+ string_data +')');`.此外,jQuery还有另一个函数`data = jQuery.parseJSON(string_data);` (3认同)
  • 我见过jQuery.parseJSON(string_data)在某些情况下失败,其中data = eval('('+ string_data +')')运行正常. (2认同)

kgi*_*kis 5

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


小智 5

$.each(JSON.parse(result), function(i, item) {
    alert(item.number);
});
Run Code Online (Sandbox Code Playgroud)