json查询循环中的每个项[number]

时间:2012-08-03 09:08:35

标签: jquery json loops

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

2 个答案:

答案 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++
      }
    });
}