我尝试执行以下操作 但在我的情况下它不适用于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除了垃圾邮件之外什么都不做。
希望你能告诉我并给我一个暗示, 如何解决我的问题。
最诚挚的问候。
答案 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了)