jQuery 1.9 - Internet Explorer 9 在第一次$ajax请求后冻结
jQuery 1.9 - Internet Explorer 9 freezes after first $ajax request
对于动态页面,我使用 Ajax Long Polling,即使使用 jQuery 1.9,Internet Explorer 也会在第一个请求后挂起。
脚本代码基于文章 使用 JavaScript 和 jQuery 的简单长轮询示例
<script type="text/javascript" charset="utf-8">
$(document).ready(function(){
(function poll(){
$.ajax({ url: "ajaxstats.json", success: function(data){
$("button.requests" ).empty().append(data.requests);
}, dataType: "json", complete: poll, timeout: 30000 });
})();
});
</script>
控制台未显示任何错误。
IE 网络监视器会立即显示对ajaxstats.json
资源的许多请求,响应时间为 <1 毫秒,响应代码304 (not modified)
。响应正文正确(JSON 代码)。
服务器代码始终将答案延迟 1000 毫秒。在 Firefox 中,Firebug XHR 日志显示每个请求大约需要 1000 毫秒,正如预期的那样。
Firefox 和 Internet Explorer 之间的 HTTP 响应代码不同:
- 在火狐中:响应代码为
200 ok
- 在 Internet Explorer 9 中,响应代码为
304 (not modified)
有没有办法解决这个IE问题?
尝试将缓存参数设置为 false,如果设置为 false,它将强制浏览器不缓存请求的页面。
<script type="text/javascript" charset="utf-8">
$(document).ready(function(){
(function poll(){
$.ajax({ url: "ajaxstats.json", success: function(data){
$("button.requests" ).empty().append(data.requests);
}, dataType: "json", complete: poll, timeout: 30000, cache: false });
})();
});
</script>
在文章中使用setTimeout
版本。timeout
选项设置请求的超时,而不是等待到下一个请求的时间。
有一个回复来自拉尔斯的评论,作者建议这样做。
IE9很慢之外,我对IE9挂起的原因没有很好的答案。 调用 ajax 调用的回调将间歇性地花费很长时间。 在工作中进行测试,我看到对同一服务器的相同 ajax 调用在 IE9 中花费的时间是 Firefox 中的 5 倍以上,即使浏览器在同一台机器上运行也是如此。
如果您正在构建一个实时应用程序并可以访问它正在运行的实际服务器,我强烈建议您使用 Socket.IO。 http://socket.io/最初它是为node构建的.js但现在大多数主要语言都有服务器端实现。
客户端库具有以下回退顺序:
- 网络套接字
- Adobe Flash Socket
- AJAX 长轮询
- AJAX 多部分流式处理
- 永远的 Iframe
- JSONP 轮询
它的浏览器上,您可以免费获得长时间轮询,但您可以使用相同的干净 Socket.IO 界面将其视为Web套接字。
- ajax请求的顺序总是不同的
- 从ajax请求中获取javascript对象
- Ajax请求文档就绪会导致jquery加载缓慢
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- JavaScript代码未正确检查ajax请求
- "日期“;AJAX请求返回的类型值未定义
- 在等待ajax请求时显示微调器并禁用页面
- 跨域ajax请求
- Ajax请求返回空的数据字符串,但首先得到了正确的数据
- Javascript-如何让脚本与Ajax请求的数据一起运行
- ajax请求成功,但可以'我看不到我的数据
- 如何将给定的curl命令复制为jquery ajax请求
- 为什么我能够从javascript控制台发送跨域ajax请求
- 一台特定计算机的Ajax请求数据未定义/失败
- 获取ajax请求的请求头
- 原型Ajax请求参数为嵌套json
- 可以't从AJAX请求中筛选数据
- jQuery Mobile Collapse上的AJAX请求
- 暂停函数执行流程,直到ajax请求完成