Javascript XMLHttpRequest strange在IE11上,ok在Edge和Chrome上
我试着做到以下几点 但在我的情况下IE11不起作用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
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,但听起来不错,我怎样才能防止这种情况。有没有最好的办法?