Javascript:xmlhttprequest 随机卡在就绪状态 1

2024-03-19

我一直在开发一个 Windows 小工具(即“浏览器”是 Internet Explorer),用于查询指定子网地址以获取信息。现在,它有时会以相对较快的速度(大约每 5 秒)执行此操作,而且效果很好。然而,有时它会卡在就绪状态 1 并且永远停留在那里。每当小工具尝试重做获取 xmlhttprequest 并从中获取信息的函数时,它将停留在状态 1。当打开小工具的多个实例然后关闭除其中一个之外的所有实例时,这很容易复制。到那时,仍然打开的几乎总是会陷入这种状态。我觉得这可能与他们都访问同一个网站有关,或者可能与 xmlhttprequests 在传输过程中停止并阻止另一个网站工作有关。下面是相关代码。

//Reference to this for the inner function
var me = this;
var request = new XMLHttpRequest();
request.onreadystatechange = onReadyStateChange;
var url = this.url;
//Make the URL random to prevent being cached
url += ("&a=" + ((new Date()).getTime()));
Trace(DEBUG_COMM, "Sase.updateStatus url: " + url);
request.open("GET", url, true);
request.send();   // fire off the request, calls httpRequestReadyStateChange as things continue
Trace(DEBUG_COMM, "Request sent" + request.readyState); 
function onReadyStateChange() {Trace(DEBUG_COMM, "Sase.httpRequestReadyStateChange: state=" + request.readyState);
    if (4 == request.readyState) {
        Trace(DEBUG_COMM, "Sase.httpRequestReadyStateChange: status=" + request.status);

        if (request.status == 200) {
            Trace(DEBUG_COMM, "retrieved html: " + request.responseText);
            var results = request.responseText;
            var resultsString = request.responseText.toString();
            Trace(DEBUG_COMM, "results String: " + resultsString);
            me.ParseStatusData(resultsString);
        }
        else {
            //me.commError(request.status);
        }

        request = null;
    }
}

好吧,看起来我已经明白了。我有一种感觉,这是一个未解决的请求,因为它只在它的实例关闭时才会发生(这意味着如果其中一个实例在与服务器通信时关闭,它将永远保持通信状态,其他人都无法访问服务器)并且看来情况确实如此。我对多个区域的代码进行了一些修改,基本上可以归结为当小工具关闭时,它确保中止所有请求。请求现在是实例变量(以允许中止它们),但每次需要时仍然会创建新的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript:xmlhttprequest 随机卡在就绪状态 1 的相关文章

随机推荐