服务器执行中止的Ajax请求,直到它完成

时间:2014-04-29 09:28:57

标签: php jquery ajax

我最近搜索了一种实现一些解除阻塞的Ajax请求的方法。我找到了许多答案,包括满足我需求的thisthis。在实现后面的解决方案后,我尝试发送一个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();
}

0 个答案:

没有答案
相关问题