浏览器中止AJAX请求

时间:2016-02-22 13:50:33

标签: javascript jquery ajax google-chrome firefox

我有一个非常需要数据的应用程序,并且有各种模块需要通过AJAX请求不断更新。这些可以是一次5到10个请求的突发(每个模块都有自己的计时器,有时它们排成一行)。在很长一段时间内,通常超过30分钟,我会看到一个或两个AJAX请求被浏览器中止(chrome和FF,我不需要IE支持)。我知道这是真的,因为Wireshark透露浏览器正在中止请求。

我创建了一个AJAX队列,一次限制为5个并发请求,因为FF和Chrome状态可以支持6.我不知道我的网络服务器是什么(嵌入式系统Web服务器,不是标准的)但是,似乎网络服务器似乎没有机会回应。超过几个小时,将有数十个中止请求。

我想阻止这种情况,我想不出该做什么。我是否需要一次限制一个请求并等待它完成?

代码: 这就是我收听请求状态的方式。希望这不会弄乱任何东西。

/**
 * Set the global Ajax timeout
 */
$.ajaxSetup({
    timeout: 30000
});

/**
 * watch for any failed Ajax requests.
 */
(function(open) {
    XMLHttpRequest.prototype.open = function() {
        // Occurs on errors
        this.addEventListener("error", function() {
            console.error("XMLHttpRequest.open: Request error.");
            self.incrementFailure();
        }, false);
        // Occurs on aborts
        this.addEventListener("abort", function() {
            console.error("XMLHttpRequest.open: Request aborted.");
            self.incrementFailure();
        }, false);
        // Occurs on timeouts
        this.addEventListener("abort", function() {
            console.error("XMLHttpRequest.open: Request timed out.");
            self.incrementFailure();
        }, false);
        open.apply(this, arguments);
    }
})(XMLHttpRequest.prototype.open);

提供我的队列没什么意义..这个问题发生在我的队列之前,我创建了这个问题来尝试解决它。​​

我如何处理我的请求没什么特别的。像

这样的间隔
function getModuleData(myFile, params) {
    return $.get(myFile, params);
}

var module1 = setInterval(getModuleData.bind(this, 'file1.xml', {}), 5000);
var module2 = setInterval(getModuleData.bind(this, 'file2.xml', {}), 5000);
var module3 = setInterval(getModuleData.bind(this, 'file3.xml', {}), 5000);

0 个答案:

没有答案