我在名为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]"
答案 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);
});