$ .each遍历数组中的每个字符

时间:2011-04-16 22:24:38

标签: jquery ajax arrays loops each

我是通过从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

2 个答案:

答案 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');
        });
    }
});

我认为它之前将响应视为普通字符串。