Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMLHttpRequest strange在IE11上,ok在Edge和Chrome上_Javascript_Xmlhttprequest_Internet Explorer 11 - Fatal编程技术网

Javascript XMLHttpRequest strange在IE11上,ok在Edge和Chrome上

Javascript XMLHttpRequest strange在IE11上,ok在Edge和Chrome上,javascript,xmlhttprequest,internet-explorer-11,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; requ

我试着做到以下几点 但在我的情况下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除了滥发日志外什么也不做

希望你能站出来给我一个提示, 如何解决我的问题


致以最诚挚的问候。

似乎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发出的)


(无耻地“借用”自-因此,如果这是错误的,不要怪我,我已经几年没有使用PHP了)

似乎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发出的)


(厚颜无耻地“借用”自-因此,如果这是错误的,请不要怪我,我已经几年没有使用PHP了)

控制台中的错误可能是什么?由于IE非常迟钝-使用
onloadend
意味着无论发生任何错误都会调用
doStuff
-在发生错误的情况下,不会有延迟,因此日志中所谓的
spam
。。。。你需要确定的是为什么IE不能成功发出请求没有错误,当“onreadystatechange”时也会发生同样的情况:如果(request.readyState==4){if(request.status==200){doStuff();}}}有趣的是没有错误,IE在成功响应之前调用
onloadend
,需要1秒的时间才能返回。。。我认为这是一个错误,你只是看不到它-你有没有尝试过不递归调用,所以你在IE开发者工具控制台中得到一个调试请求-嗯,现在你在前面的评论中的“when”之后添加了,我的结论是,IE被破坏了,请为IEoh使用setTimeout,等等,也许IE正在从缓存中获取结果!嗯,谢谢,我还没有测试过Jet,但听起来不错,我怎样才能防止这种情况。有什么最好的方法吗?可能是控制台中的错误?由于IE非常迟钝-使用
onloadend
意味着无论发生任何错误都会调用
doStuff
-在发生错误的情况下,不会有延迟,因此日志中所谓的
spam
。。。。你需要确定的是为什么IE不能成功发出请求没有错误,当“onreadystatechange”时也会发生同样的情况:如果(request.readyState==4){if(request.status==200){doStuff();}}}有趣的是没有错误,IE在成功响应之前调用
onloadend
,需要1秒的时间才能返回。。。我认为这是一个错误,你只是看不到它-你有没有尝试过不递归调用,所以你在IE开发者工具控制台中得到一个调试请求-嗯,现在你在前面的评论中的“when”之后添加了,我的结论是,IE被破坏了,请为IEoh使用setTimeout,等等,也许IE正在从缓存中获取结果!嗯,谢谢,我还没有测试过Jet,但听起来不错,我怎样才能防止这种情况。有没有最好的办法?