1

我有一个 JS 函数可以进行 ajax 调用并连续运行

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

只需在第一个函数的成功块中调用第二个函数。

 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 回答