Javascript Ajax轮询似乎只在最后一次请求时才停止
我使用Ajax轮询来轮询服务器的进度百分比。如果您想知道,我没有使用setInterval,因为这会导致多个请求彼此饥饿。我在jQuery.ajax()的“complete”回调中使用setTimeout,并将下一个请求的时间设置为5000毫秒 因此ajax调用的间隔大约为5-7秒(取决于前一个ajax调用的响应时间,从0%到100%缓慢进行) 问题是,虽然所有的ajax调用看起来都很好并且几乎按时完成,但只有最后一个ajax调用延迟了。而且它从服务器获得响应时没有延迟。最后一个ajax调用本身是在大约2分钟的长时间延迟后完成的 我已经搜索并阅读了所有类似的问题/答案,我的场景似乎很独特,只有最后一个检查状态请求延迟,而所有其他请求都正常工作。 此ajax调用的服务器日志在几乎所有测试中都为我提供了以下模式(这是一个示例):Javascript Ajax轮询似乎只在最后一次请求时才停止,javascript,jquery,ajax,settimeout,polling,Javascript,Jquery,Ajax,Settimeout,Polling,我使用Ajax轮询来轮询服务器的进度百分比。如果您想知道,我没有使用setInterval,因为这会导致多个请求彼此饥饿。我在jQuery.ajax()的“complete”回调中使用setTimeout,并将下一个请求的时间设置为5000毫秒 因此ajax调用的间隔大约为5-7秒(取决于前一个ajax调用的响应时间,从0%到100%缓慢进行) 问题是,虽然所有的ajax调用看起来都很好并且几乎按时完成,但只有最后一个ajax调用延迟了。而且它从服务器获得响应时没有延迟。最后一个ajax调用本身
- Ajax请求1:在0秒时发出-返回0%的进度
- Ajax请求2:在7秒时发出-返回17%的进度
- Ajax请求3:在13秒时发出-返回30%的进度
- Ajax请求4:在20秒时发出-返回54%的进度
- Ajax请求5:在157秒时发出-返回100%的进度
var makeNextAjaxCall = true;
function ajaxCaller(url, data) {
$.post({
url: url,
data: data,
success: function(data){
if(data.progress === 100) {
makeNextAjaxCall = false;
}
},
complete: function() {
if(makeNextAjaxCall) {
setTimeout(function() {
ajaxCaller(url, data);
}, 5000);
}
}
});
}
我花了好几天的时间试图找出上一个ajax调用延迟的原因,甚至不是由服务器延迟的,而是由客户端延迟的。您是否尝试过将超时更改为20000ms或1000ms以查看发生了什么?我猜第三个请求需要大量时间,服务器才能响应延迟了最后一个调用的请求返回100%@J.Nicastro没有好的建议会尝试once@AlonEitan正如我在问题上所说的,最后一个请求本身是在间隔2分钟而不是5秒后由ajax发出的,因此它似乎不是由服务器造成的延迟。此外,即使总共发出了4-5个请求,甚至10-20个请求被拒绝,这种情况也会发生e总共发出。@AlonEitan这正是我现在要做的。.会发布结果吗?你是否尝试过将超时更改为20000ms或1000ms以查看发生了什么?我猜第三个请求需要大量时间服务器响应,这会延迟返回100%的最后一个呼叫@J.Nicastro没有好的建议会尝试once@AlonEit正如我在我的问题上所说的,最后一个请求本身是由ajax在间隔2分钟后发出的,而不是5秒,因此它似乎不是由服务器引起的延迟。此外,即使在总共发出4-5个请求的情况下,甚至在总共发出10-20个请求的情况下,也会发生这种情况。@AlonEitan这正是我试图做的事情。@AlonEitan我将公布结果