我一直在研究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;
}
}
最佳答案
好吧,好像我想通了。我感觉到这是一个未解决的请求,因为它仅在实例关闭时才会发生(这意味着如果其中一个实例在与服务器通信时处于关闭状态,则它将永远保持通信状态,其他任何人都无法访问服务器)看来是这样。我在多个区域对代码进行了一些修改,基本上,归结为当小工具关闭时,它确保中止所有请求。现在,这些请求是实例变量(以允许中止这些请求),但每次需要它们时,它们仍然是新的。
关于javascript - Javascript:xmlhttprequest随机停留在就绪状态1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4401608/