我有两个循环: 一个用于计算页面中的对象,另一个用于设置每个对象的变量。 假设x是对象的数量,y是变量; 所以例如:
for x=10 ; y=3
循环看起来像:
x:y
1:1
2:2
[..]
8:2
9:3
10:1
对于每个对象,我需要进行json查询。 Json将回复0/1意味着查询/未成功, 如果响应失败,查询必须忽略y var: 例如:
x:y
1:1 //1
2:2 //1
3:3 //0 - this is the failed query
4:1 //1
5:2 //1
6:1 //1 - y !=3 cause of failed query
...
$('button.#start').click(function(){
var last = $('input.blue').length;
var totalpackages = '10';
var currentpackage;
for( currentpackage = '1'; currentpackage <= totalpackages; )
{// for each package;
var n;
for(n='1'; n <= last;)
{
//alert(currentpackage + ' : ' + n)
//n++
//currentpackage++
$.getJSON('api/testsenderfail.php',
function(data){
worklink = data.data;
if(worklink == '1')
{
alert(currentpackage + ' : ' + n + ' : ' + worklink)
n++
currentpackage++
}else{
alert(currentpackage + ' : ' + n + ' : ' + worklink)
n++
//currentpackage++
}
});
}
}
})
我确信我做错了。 Mozzila警告“此页面上的脚本可能正忙,或者可能已停止响应。 您现在可以停止脚本,也可以继续查看脚本是否完成。“
Php脚本“api / testsenderfail.php”生成json数组并输出{“data”:“1”}(0/1) 90%输出1和10%输出0。 这是出于测试目的。
<?php
$rand = rand(0, 9);
if($rand == '0'){$work = '0';}else{$work = '1';}
$data = array('data' => $work);
echo json_encode($data);
?>
答案 0 :(得分:0)
AJAX调用是异步的,这意味着在退出click事件处理程序后将运行回调方法。您只是在回调方法中更改循环计数器,而这只能在您完成循环后才会发生,并且只有在您更改循环计数器后才会发生。
所以,你有一个永恒的循环。
答案 1 :(得分:0)
我找到了一种方法来做到这一点。如果其他人处于同样的情况,我会发布。
$('button.#start').click(
function(){
var X;
for(X='1'; X <= lastX;){
do_Y_vals(x, y) // here a loop to count X that will pass every X to another function
x++
y++
}
})
在这个函数里面查询每个X. 如果他得到答复,该函数将循环,直到y = lastY
function do_y_vals(x){
$.getJSON(//variables here
function(data){
if(data.reply == '1'){
function do_y_vals(x, y)
y++
}
});
}