-3

看下面的代码,它似乎执行了很多$.post而不等待data == "1"

如果等于 ,它应该进行下一次迭代 ( $.each) 。data1

怎么做到呢?

$.each(data, function(index) {
  $.post("tracking.php",  { action: "send", id: getId }, function(data) {
    if (data == "1") {
      //
    }
  },'json');
});
4

3 回答 3

2

由于$.post是异步的,你不能用它来控制循环。您可以使用如下结构:

var data = [1, 2, 3];

function iterator(arr) {
    function iterate(i) {
        // Use `arr[i]`
        $.post("tracking.php",  { action: "send", id: getId }, function(data) {
            if (data == "1") {
                iterate(++i);
            }
        }, "json");
    }
    iterate(0);
}

iterator(data);

演示:http: //jsfiddle.net/Ezwj4/

当然,在演示中,我不得不修改代码/参数以使其与 jsFiddle 一起使用。注意它在没有响应后是如何停止的"1"(这只是数组中的值,因为我只需要回显该值以显示它是如何工作的)。您可以查看浏览器的控制台以了解发生了什么。

更新:

为确保不超出数组的边界,您需要检查其长度。这是一个更新:

function iterator(arr) {
    // You can use `arr` anywhere inside of `iterator`
    function iterate(i) {
        // You can use `i` anywhere inside of `iterate`
        if (i < arr.length) {
            $.post("tracking.php",  { action: "send", id: getId }, function(data) {
                if (data == "1") {
                    iterate(++i);
                }
            }, "json");
        }
    }
    iterate(0);
}
于 2013-04-24T16:41:56.017 回答
0

post您可以使用数组的第一个索引调用第一个请求,data然后等待response(data)返回,然后post在下一个索引上触发另一个请求,依此类推:

function posts(index) {
  $.post("tracking.php",  { action: "send", id: getId }, function(response) {
    if (response == "1") {
       index++;
       if (index < data.length) post(index); //call the function "post" again only if index is lower than the array "data" length.
       }
    }
  },'json');
});
posts(0);
于 2013-04-24T16:41:10.250 回答
-1

使用 $.each 和异步请求,您无法控制循环的执行,但是,使用 for 循环可以做到:

for(var index in data){
    data = 0;
    $.ajax({
        url:"tracking.php",  
        data: { action: "send", id: getId }, 
        type: 'POST',
        async: false,
        success: function(tmpData){
          data = tmpData
        }
    });
    if(data != '1'){
        break;
    }
}

在此示例中,我们使用 for 循环和 jQuery 同步 ajax 请求从服务器获取结果并验证该值是否符合预期。如果返回与“1”不同的东西,我们只需中断(停止)循环。

于 2013-04-24T16:42:11.053 回答