1

ajax呼び出しを行い、継続的に実行するJS関数が1つあります

function First(ServerId)
{
    var CallServer = jQuery.ajax({
        type: "POST",
        url: "somefile.php",
        dataType: "json",
        success: function(response)
        {
           // do something here
           First(response.ServerId);
        }
    }};
}

somefile.phpには60 秒のスリープ タイマーがあるため、ajax 呼び出しは 60 秒後に応答を返します。異なるサーバー ID が返されるたびに。

今、別の機能があり、このようなことをしたい

function Second()
{
   /*
   wait for 5 seconds to see if function First() has returned server id
   if (ServerIdIsReturned)
   {
         i) abort CallServer
        ii) make another Ajax call (CallServer2)
       iii) after CallServer2 is done, call CallServer with the returned ServerId
   }
   else
   {
         i) abort CallServer
        ii) make another Ajax call (CallServer2)
       iii) after CallServer2 is done, call CallServer with the ServerId as 0
   }       
   */
}

適切に説明したかどうかはわかりませんが、Second()関数First()が新しいサーバー ID を返したかどうかをチェックインし、それに応じて先に進みたいと思います。setTimeout を使用して Second() 関数を分割する必要があると思いますが、よくわかりません。

どうすればこれを達成できますか?

4

3 に答える 3

2

最初の関数の成功ブロックで2番目の関数を呼び出すだけです。

 success: function(response) {
      // do something here
      First(response.ServerId);
      // proceed further
      Second();
 }

遅延通話を行うには、setTimeout(Second,5000);

于 2012-07-06T09:28:41.567 に答える
0

呼び出しの前にグローバル変数を false に設定し、呼び出しが返されたときに true に設定すると、その変数を確認できます

于 2012-07-06T09:30:45.403 に答える
0

jQuery ajax呼び出しの組み込みのタイムアウト機能を使用しないのはなぜですか-5秒のタイムアウトを設定してからエラーハンドラーを追加します-タイムアウトを確認し、必要に応じて再度呼び出します。

var CallServer = jQuery.ajax({
        type: "POST",
        url: "somefile.php",
        timeout:5000,
        dataType: "json",
        success: function(response)
        {
           // do something here
           First(response.ServerId);
        },
        complete(jqXHR, textStatus)
        {
            if (textStatus === "timeout")
           {
               Second();
            }
        }
    }};
于 2012-07-06T10:08:01.890 に答える