我是通过从json ajax请求中提取数据来创建数组的。但是在另一个$.each
语句中使用该数组会导致迭代每个字符而不是每个值。
var setInfo = [];
$.ajax({
url: blah,
async: false,
dataType: 'json',
success: function{
$.each(data.photosets.photoset, function(i,photoinfo) {
setInfo.push(photoinfo.id);
}) // completed set values look like 1234,5678,etc..
holler();
})
function holler() {
$.each(setInfo, function(index, value) {
// using each array value in here splits into each
// character rather than each value. So rather than
// iterating through each whole value 1234,5678,etc..
// It is iterating as 1,2,3,4,5,6,7,8,and so on.
var url1 = "http://www.test.com/" + value;
// Rather than http://www.test.com/1234, value is being evaluated as just 1
// so the result is http://www.test.com/1
});
以下是我获得id的json响应示例:
({"photosets":{"photoset":
[{"id":"123456789", "primary":"102932423", "secret":"19ca84349a", "server":"5143", "farm":6, "photos":"52", "videos":0, "title":{"_content":"Thanksgiving 2010"}, "description":{"_content":""}},
{"id":"012345678", "primary":"1294872352", "secret":"983a9c58d1", "server":"5184", "farm":6, "photos":"12", "videos":0, "title":{"_content":"24th Birthday Dinner at McCormick and Schmitts"}, "description":{"_content":""}}]}, "stat":"ok"})
编辑:
看来我有一段代码,我假设是将数组转换为字符串:
setInfo += '';
在stackoverflow上运行我的代码在firebug上的控制台,我能够看到一个数组现在显示为[1234,5678]但是在本地运行,我得到一个奇怪的jQuery错误:
uncaught exception: [Exception... "Could not convert JavaScript argument arg 0 [nsIDOMDocumentFragment.appendChild]" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: http://code.jquery.com/jquery-1.5.js :: <TOP_LEVEL> :: line 5579" data: no]
Line 0
答案 0 :(得分:1)
我尝试了代码,它可以按照您提供的数据按预期工作。我建议在你的函数中使用console.log来查看你的数组中发生了什么。
> x= ({"photosets":{"photo set":[{"id":"123456789", "primary":"102932423",...
> xx=[]
> $.each(x.photosets.photoset,function(i,photoinfo){ xx.push(photoinfo.id); });
> xx
["123456789", "012345678"]
> $.each(xx,function(index,value){ console.log(value); });
123456789
012345678
答案 1 :(得分:0)
我遇到了同样的问题。来自servlet的我的JSON响应是简单的数组: [“一二”] 在使用jquery ajax进行迭代时,它遍历每个字符而不是整个元素,即使在servlet结束时,响应内容类型也设置为“application / json”。然后我在ajax调用属性中添加了dataType:'json',它工作正常。
$.ajax({
type:'POST',
data: {
moduleName: moduleName,
action: 'getSubModules'
},
dataType: 'json', //this one
url:'AjaxController',
success: function(response){
$.each(response, function(index, value) {
alert('value');
});
}
});
我认为它之前将响应视为普通字符串。