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

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

这是归还的 JSON..。

[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]

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

我使用的 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 这让我有点困惑,根据文件,它应该像我一样工作,但它没有。根据 Fiddler 的说法,标题显示:-

Content-Type: application/json; charset=utf-8

上面的 JSON 是完全正确的。我使用铬,如果这使任何不同。将测试在 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]"
734029 次浏览
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);
});
});

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

你可以使用 data = eval('(' + string_data + ')');或者更安全的 data = JSON.parse(string_data);,但是以后只能在 FF 3.5或者包含 Json2.js的情况下工作

从1.4.1开始,jQuery 也有相应的函数 $.parseJSON()

但是实际上,$.getJSON()应该给你已经解析过的 json 对象,所以你应该彻底检查所有的东西,有一些错误隐藏在某个地方,比如你可能忘记引用 json 中的一些东西,或者缺少一个括号。

GetJSON 将为您计算数据的 JSON 值,只要使用了正确的内容类型。确保服务器将数据作为 application/json 返回。

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