0

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

变量 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)

        });
   }

});

控制台日志(arr)

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

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

});

这会给我一个关于萤火虫的 [ ] ,我可以扩展它。然后它有 0 和 1 并显示 id

[ ]

0 1234343

1 2343223

2 414234

3 232342

但后来在程序中,我尝试用 $.each 循环它,它不会读取它。

通过 console.log 打印时,我试图让 arr 看起来像这样。

[“1234343”、“2343223”、“414234”、“232342”]

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

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

原始 JSON 响应:[“1234343”、“2343223”、“414234”、“232342”]

4

2 回答 2

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
});
于 2013-01-17T19:31:40.623 回答
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变量记录到控制台。这可能是您看不到任何内容的原因,因为记录了一个空数组。

使用回调函数,您可以确保arr仅在 ajax 调用返回并且您已填充arr.

于 2013-01-17T19:29:30.277 回答