我最近搜索了一种实现一些解除阻塞的Ajax请求的方法。我找到了许多答案,包括满足我需求的this和this。在实现后面的解决方案后,我尝试发送一个Ajax请求,然后调用另一个请求,以便第一个中止(因此不会让用户等待),第二个运行。
但我遇到这种情况,虽然像firebug这样的工具显示第一个请求被中止,但第二个请求执行将花费与执行两个请求所需的时间一样长。
为了使其更具可读性,假设“request1”需要 10秒才能执行“request2”需要 5秒即可。现在如果我在第二个5中止“request1”,那么“request2”将大约 10秒(距离“5秒” “和”request2“ 5来执行。
我监控Apache服务器的执行情况,我的第一个猜测是,当请求发送到服务器时,无论我们是否在客户端中止它,服务器资源都将被消耗,唯一发生的是客户端不期望结果,因为请求者(在我的例子中是request1)被中止。
现在我的问题:如果我的猜测是正确的,那么无论如何让服务器知道停止当前进程并启动下一个进程(this question没有回答)?
或者,如果我们的服务器具有超过处理能力,我们如何让新请求由另一个处理器执行?
这是我的进一步调查的代码:
//Ajax Request Queue
var ajaxQueue = [];
ajaxQueue.push(//Push in Ajax Queue
$.ajax({
type: 'POST',
cache: false,
url: url,
data: {'token': $.cookie('s3_ctoken')},
dataType: 'html',
beforeSend: function (xhr, setting) {
},
success: function (res, textStatus, xhr) {
},
error: function (xhr, textStatus, thrownError) {
},
complete: function () {
},
async: true
})
);
//On next ajax request
if(ajaxQueue.length > 0){//Means there is some ajax requests are running
for(var i = 0; i < ajaxQueue.length; i++)
ajaxQueue[i].abort();
}