看下面的代码,它似乎执行了很多$.post
而不等待data == "1"
如果等于 ,它应该进行下一次迭代 ( $.each
) 。data
1
怎么做到呢?
$.each(data, function(index) {
$.post("tracking.php", { action: "send", id: getId }, function(data) {
if (data == "1") {
//
}
},'json');
});
看下面的代码,它似乎执行了很多$.post
而不等待data == "1"
如果等于 ,它应该进行下一次迭代 ( $.each
) 。data
1
怎么做到呢?
$.each(data, function(index) {
$.post("tracking.php", { action: "send", id: getId }, function(data) {
if (data == "1") {
//
}
},'json');
});
由于$.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);
}
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);
使用 $.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”不同的东西,我们只需中断(停止)循环。