我有一个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()
返回了新的服务器ID,我想检查函数First()
并相应地继续进行。我想我需要使用setTimeout并分解Second()函数,但不确定。
我该如何做到这一点?
答案 0 :(得分:2)
只需在第一个函数的成功块中调用第二个函数。
success: function(response) {
// do something here
First(response.ServerId);
// proceed further
Second();
}
要拨打延迟电话,请使用setTimeout(Second,5000);
答案 1 :(得分:0)
在调用之前将全局变量设置为false,并在调用返回时将其设置为true,然后您可以检查该变量
答案 2 :(得分: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();
}
}
}};