使用$.each在Json数据上进行jquery循环。
使用$.each在Json数据上进行jquery循环。
我在一个名为data的变量中返回了以下JSON数据。
这是返回的JSON数据...
[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]
我尝试使用$.each循环遍历这个集合,但是遇到了一个显示undefined的问题。我尝试了很多不同的语法,但似乎无法解决这个问题。
我正在使用的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格式是完全正确的。我使用的是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]"
问题出现的原因:
上述代码中,使用了jQuery的$.each方法对JSON数据进行循环遍历并输出每个元素的number属性。然而,可能会出现以下问题导致代码不起作用或者报错:
1. JSON数据格式错误:JSON.parse方法可能无法正确解析result变量中的数据,导致无法获取有效的JSON对象。
2. result变量为空:result变量可能没有被正确赋值,或者赋值为null或undefined,导致无法解析JSON数据。
3. number属性不存在:JSON数据中的每个元素可能不存在number属性,导致无法获取到正确的值。
解决方法:
1. 确保JSON数据格式正确:使用开发者工具或其他方式检查result变量中的数据是否符合JSON格式要求。
2. 检查result变量是否正确赋值:确保result变量被正确初始化,并且赋值为包含有效JSON数据的字符串。
3. 检查JSON数据中的属性:确保JSON数据中的每个元素都有number属性,或者在代码中添加判断逻辑,避免处理不存在number属性的元素。
完整代码如下:
$.each(JSON.parse(result), function(i, item) { alert(item.number); });
以上代码可以使用jQuery的$.each方法循环遍历JSON数据,并输出每个元素的number属性。在使用这段代码时,需要确保JSON数据格式正确,result变量被正确赋值,并且JSON数据中的每个元素都有number属性。这样才能保证代码正常执行,避免出现错误。
问题的原因是在第一段代码中,使用了$.each()函数对json数据进行遍历,并成功地弹出了每个对象的PageName属性。然而,在第二段代码中,将json数据存储在一个名为data.result的变量中,并尝试使用$.each()函数对其进行遍历,但却无法成功弹出对象的PageName属性。
解决方法是使用eval()函数来解析data变量中的json数据,然后再对其进行遍历。在第三段代码中,使用$.get()函数从服务器获取数据,并将返回的数据传递给回调函数。在回调函数中,将使用eval()函数解析返回的数据,并使用$.each()函数对其进行遍历,成功地弹出每个对象的PageName属性。
然而,使用eval()函数会存在一些潜在的安全风险,因此最好避免使用它。在第四段代码中,建议查看服务器返回的数据格式,并根据实际情况进行调整,以避免使用eval()函数。
最后,还提到了在jQuery的httpData函数中使用了window["eval"]来处理json数据。然而,实际上不需要使用eval()函数,因为jQuery已经提供了处理json数据的功能。
总结起来,问题的原因是在对json数据进行遍历时出现了错误,解决方法是使用eval()函数来解析json数据,但最好避免使用eval()函数。同时,还提到了一些关于jQuery的httpData函数和服务器返回数据格式的内容。