1

ページからオブジェクトをカウントするループと、各オブジェクトに変数を設定するループの 2 つがあります。x がオブジェクトの数で、y が変数であるとしましょう。例:

for x=10 ; y=3ループは次のようになります。

 x:y
    1:1
    2:2
    [..]
    8:2
    9:3
    10:1

オブジェクトごとに、json クエリを作成する必要があります。Json は、クエリが成功した/失敗したことを意味する 0/1 で応答し、応答が失敗した場合、クエリは y 変数を無視する必要があります。

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 に答える