IE11上的XMLHttpRequest很奇怪,在Edge和Chrome上都可以

时间:2017-05-24 11:30:15

标签: javascript xmlhttprequest internet-explorer-11

我尝试执行以下操作 但在我的情况下它不适用于IE11?

var request = new XMLHttpRequest();

function doStuff()
{
 console.log("next request");
 doRequest();     
}

function doRequest() {
 request.open("GET","http://127.0.0.1/poll.php", true);
 request.onloadend = doStuff;
 request.send();
}

doRequest();

PHP脚本poll.php正在休眠一秒钟。 现在点:Egde和Chrome每秒请求一次 IE浏览器没有,它每秒发送1000个请求并且它们甚至没有执行。

如果我删除无限循环,IE正在执行一个请求, 如果它是一个无限循环,IE除了垃圾邮件之外什么都不做。

希望你能告诉我并给我一个暗示, 如何解决我的问题。

最诚挚的问候。

1 个答案:

答案 0 :(得分:0)

似乎IE缓存了请求,因此第二次和后续请求立即完成 - 运行一次代码后,即使第一次请求也会这样做

  

作为旁注,我真的很惊讶其他浏览器不会缓存XHR请求 - 至少,如果问题是浏览器行为的准确反映,他们似乎不会这样做!

一种解决方案是将随机“搜索”(或查询)字符串添加到URL

function doRequest() {
    request.open("GET","http://127.0.0.1/poll.php?_"+Math.random(), true);
    //                                           ^^^^^^^^^^^^^^^^^
    request.onloadend = doStuff;
    request.send();
}

另一种方法是让服务器响应响应头,告诉浏览器“不要缓存这个” - 在PHP的情况下(因为请求显然是针对PHP)

header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

(从https://stackoverflow.com/a/13640164/5053002无耻地“借用” - 所以,如果它错了,不要怪我,我几年没用PHP了)