惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
罗磊的独立博客
博客园 - 聂微东
T
The Blog of Author Tim Ferriss
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
A
About on SuperTechFans
腾讯CDC
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
IT之家
IT之家
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
宝玉的分享
宝玉的分享
C
Check Point Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
月光博客
月光博客
T
Tailwind CSS Blog
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog

博客园 - s80895304

win8 framework3.5安装 ChangeCharToTable sql 触发器 mysql 备忘sql ActiveMQ 安装 【转】j2ee 环境搭建 C#原始类型扩展方法—this参数修饰符 消息队列(Message Queue)简介及其使用 Web Service 身份验证 sql 索引 Memcached、MongoDB、Redis和tokyotyrant 【转】ActiveMQ redis iphone 技巧 10款iOS高效开发必备的Objective-C类库 ASIHTTPRequest jquery 倒计时插件 Queue 队列 写日志简单应用 js keycode
IE中同一个url第二次AJAX调用无法触发onreadystatechange事件
s80895304 · 2011-11-25 · via 博客园 - s80895304

如果第二次通过XMLHttpRequest去请求一个URL,则不会触发onreadystatechange时间,虽然从调试插件来看,ie是进行了这次请求。

后来发现,这个是因为在ie下,如果请求的URL已经被浏览器cache,则调用send方法以后,xhr的readyState已经成为了4,即 一开始就是请求完成的状态,当然以后readystate不会再被赋值,也不会触发onreadystatechange事件。

解决办法:在调用send后立即检查xhr的readystate,如果已经结束,则直接处理,不必再等待onreadystatechange事件。

  1. getJSON : function(url, callback, onerror) {   
  2.     var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();  
  3.     onerror = $X.isFunction(onerror) ? onerror : null;  
  4.     xhr.open('GET', url, true);  
  5.     xhr.setRequestHeader("X-Requested-With""XMLHttpRequest");  
  6.     xhr.send();  
  7.     var f = function() {  
  8.         if (xhr.readyState == 4) {    
  9.             if (xhr.status == 200) {    
  10.                 try {   
  11.                     var data = eval('('+xhr.responseText+')');  
  12.                 } catch (e){  
  13.                     onerror && onerror();   
  14.                     xhr = null;  
  15.                     return;  
  16.                 };  
  17.                 callback(data);  
  18.             } else {  
  19.                 onerror && onerror();  
  20.             }  
  21.             xhr = null  
  22.         }  
  23.     };  
  24.     if (xhr.readyState == 4) {   
  25.         f();  
  26.     } else {  
  27.         xhr.onreadystatechange = f;  
  28.     }  

  http://www.iteye.com/topic/467019