【发布时间】:2012-12-31 12:05:27
【问题描述】:
我的脚本正在向一个页面 (http://example.org/getlisting/) 发送一个 GET 请求,而该页面又用一个 JSON 对象进行响应。 ({"success":true, "listingid":"123456"})
这是一个示例 sn-p:
var listingAjax = new XMLHttpRequest();
listingAjax.addEventListener("load", listingCallback, false);
function listingCallback(event) {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);
}
}
listingAjax.open("GET", "http://example.org/getlisting/", true);
listingAjax.send();
足够简单。该脚本也可以完美运行!当我想这样做时会出现问题:
var listingAjax = new XMLHttpRequest();
listingAjax.addEventListener("load", listingCallback, false);
function listingCallback(event) {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);
}
}
window.setInterval(function() {
listingAjax.open("GET", "http://example.org/getlisting/", true);
listingAjax.send();
}, 250);
我想应该发生的是我的脚本将创建一个稳定的 GET 请求流,这些请求被发送到服务器,然后服务器响应每个请求。然后,我的脚本将接收服务器的响应并将它们发送到回调。
更准确地说,假设我让这个脚本运行了 5 秒,我的脚本在那段时间内向服务器发送了 20 个 GET 请求。我希望我的回调 (listingCallback) 也会被调用 20 次。
问题是,事实并非如此。似乎,如果我在收到来自服务器的响应之前发送了两个 GET 请求,那么响应就会被忽略或丢弃。
我做错了什么/对此有误解?
【问题讨论】:
-
您在哪些浏览器中看到了这种行为?我不确定为什么会这样,但我想知道它是否是特定于浏览器的。
-
这是谷歌浏览器。因为我计划将来将此脚本转换为 NodeJS 应用程序(明年某个时间;)),所以我计划使其具体化
标签: javascript ajax asynchronous xmlhttprequest