六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 47|回复: 0

IE中同一个url第二次AJAX调用无法触发onreadystatechange事件

[复制链接]

升级  48%

34

主题

34

主题

34

主题

秀才

Rank: 2

积分
122
 楼主| 发表于 2013-1-23 02:39:05 | 显示全部楼层 |阅读模式
 
今天在做一个ajax请求的时候,在IE下遇到了一个很奇怪的问题:
 
如果第二次通过XMLHttpRequest去请求一个URL,则不会触发onreadystatechange时间,虽然从调试插件来看,ie是进行了这次请求。
 
后来发现,这个是因为在ie下,如果请求的URL已经被浏览器cache,则调用send方法以后,xhr的readyState已经成为了4,即一开始就是请求完成的状态,当然以后readystate不会再被赋值,也不会触发onreadystatechange事件。
 
解决办法:在调用send后立即检查xhr的readystate,如果已经结束,则直接处理,不必再等待onreadystatechange事件。
 

getJSON : function(url, callback, onerror) { // 处理ajax get请求var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();onerror = $X.isFunction(onerror) ? onerror : null;xhr.open('GET', url, true);xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");xhr.send();var f = function() {if (xhr.readyState == 4) {          if (xhr.status == 200) {              try { var data = eval('('+xhr.responseText+')');} catch (e){onerror && onerror(); // 处理json解析错误xhr = null;return;};callback(data);        } else {onerror && onerror();}xhr = null; // fix memory leaks    }};if (xhr.readyState == 4) { // for the stupid ief();} else {xhr.onreadystatechange = f;}}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表