使用$ .each无法正常迭代数组值

时间:2013-01-17 19:21:20

标签: jquery arrays each

我一直试图弄清楚如何通过以下代码进行迭代。

  

var arr = []

     

$。AJAX({

 type: 'POST',
   dataType: 'html', 
   url:   '/test/public/index/getid', 
   success: function(response) {
        response = $.parseJSON(response)
        $.each(response, function(index, value) {
             arr.push(value)

        });
   }
     

});

     

的console.log(ARR)

     

$。each(arr,function(index0,value0){

     

console.log(' INDEX0:' + value0);

     

});

这会给我一个我可以扩展的firebug上的[]。它有0和1,并显示ids

[]

0 1234343

1 2343223

2 414234

3 232342

但是稍后在程序中我尝试用$ .each循环它并且它不会读它。

我正在尝试通过console.log打印时看起来像这样。

[" 1234343"," 2343223"," 414234"," 232342"]

里面的值是在第一个循环上推送的id。

有关如何做到这一点的任何想法?试图获得arr.length并将其用作测试条件。

RAW JSON响应: [" 1234343"," 2343223"," 414234"," 232342"]

2 个答案:

答案 0 :(得分:2)

Ajax是异步的,不要尝试从它的成功回调之外的ajax请求中访问数据。

$.ajax({
   type: 'POST',
   dataType: 'json', 
   url: '/test/public/index/getid', 
   success: function(arr) {
       console.log(arr);
   }
});

你也可以这样做:

var request = $.ajax({
    type: 'POST',
    dataType: 'json', 
    url: '/test/public/index/getid'
});
request.done(function(arr){
    console.log(arr);
});

第二种方式允许您传递request并在任何需要的地方使用它,只需执行此操作:

request.done(function(arr){
    // do something with arr
    console.log(arr)
});

更新评论,

如果请求2取决于请求1,请使用以下结构:

var request1 = $.ajax({...});

request1.done(function(){
    var request2  = $.ajax({...});
    request2.done(function(){
        // both are done, do stuff
    });
});

或者如果你想发送请求1和2,然后在两者完成后再做一些事情,你可以这样做:

var request1 = $.ajax({...});
var request2 = $.ajax({...});
$.when(request1,request2).done(function(req1,req2) {
    // do stuff
});

答案 1 :(得分:1)

var arr = []

var callback = function(arr){
       console.log(arr);
};

$.ajax({

 type: 'POST',
   dataType: 'html', 
   url:   '/test/public/index/getid', 
   success: function(response) {
        response = $.parseJSON(response)
        $.each(response, function(index, value) {
             arr.push(value)

        });
        callback(arr);
   }
});

为什么不做这样的事情?

您执行主程序。

  • 您定义了一个数组
  • 然后你进行ajax调用
  • 然后记录arr。

第二步是异步过程,主程序执行不会停止进行ajax调用,无论ajax调用是否完成,它都将继续执行并完成执行。因此,在执行console.log(arr)时,您的ajax调用可能/可能不会返回,留下一个空arr变量以记录到控制台。这可能就是你没有看到任何东西的原因,因为记录了一个空数组。

使用回调函数,只有在ajax调用返回并且填充了arr时,才能确保将arr记录到控制台。