1

我有两个循环:一个用于计算页面中的对象,另一个用于为每个对象设置一个变量。假设 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);
?>
4

2 回答 2

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++
      }
    });
}
于 2012-08-06T09:56:13.487 回答
0

AJAX 调用是异步的,这意味着回调方法将在您退出单击事件处理程序后运行。您只是在回调方法中更改循环计数器,这只能在您完成循环后发生,并且只能在您更改循环计数器后发生。

所以,你有一个永恒的循环。

于 2012-08-03T09:20:30.807 回答