私は、指定されたサブネットアドレスに情報を問い合わせるWindowsガジェット(「ブラウザ」はInternet Explorerであることを意味します)に取り組んできました。現在、これは比較的速いペース(約5秒ごと)で実行されることがあり、十分に機能します。ただし、準備完了状態1でスタックし、永久にそこにとどまる場合があります。ガジェットがxmlhttprequestを取得し、そこから情報を取得するための関数をやり直そうとすると、状態1のままになります。これは、ガジェットの複数のインスタンスを開いて、そのうちの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;
}
}