FireFox下Ajax同步请求onReadyStateChange不执行问题解决

来源:互联网 发布:淘宝 拉萨蜜摄影 编辑:程序博客网 时间:2024/05/12 15:45
在FireFox下,使用Ajax提交请求,而该请求是同步时,IE浏览器下正常使用的代码在FireFox下却不执行,主要是不执行onReadyStateChange这个方法体里面的代码,代码如下:

 

[javascript] view plaincopyprint?
  1. var xmlhttp = loadXMLDoc();  
  2. var startRequestMethod = function(obj){  
  3.     var url = "http://www.xxxx.com?id=1";         
  4.     xmlhttp.open("get", url, false);    //这是个同步请求     
  5.     xmlhttp.send(null);        
  6.     xmlhttp.onReadyStateChange = stateChange;  //注意这儿  
  7. }  
  8.   
  9. var stateChange = function(){  
  10.     if(xmlhttp.readyState == 4){  
  11.        if (xmlhttp.status == 200){  
  12.             //需要执行的代码  
  13.        }else{  
  14.             alert("操作失败!");  
  15.        }  
  16.     }  
  17. }  
  18.   
  19. var loadXMLDoc = function(){  
  20.   var xmlhttp = null;  
  21.   if(window.XMLHttpRequest){  
  22.       xmlhttp = new XMLHttpRequest();  
  23.   }else if (window.ActiveXObject){  
  24.       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");  
  25.   }  
  26.   return xmlhttp;  
  27. }  

查了资料后发现,FireFox3下同步请求不需要等待onReadyStateChange,而直接执行后续代码,于是只要将原先代码中

xmlhttp.onReadyStateChange = stateChange;    这句注掉,然后直接调用stateChange()方法。代码如下:

[javascript] view plaincopyprint?
  1. var startRequestMethod = function(obj){  
  2.     var url = "http://www.xxxx.com?id=1";         
  3.     xmlhttp.open("get", url, false);    //这是个同步请求     
  4.     xmlhttp.send(null);        
  5.     //xmlhttp.onReadyStateChange = stateChange;  //注意这儿  
  6.     stateChange();  
  7. }  

综合上面的,可以对同步和异步请求做个判断,做个通用化的处理,代码如下:

 

[javascript] view plaincopyprint?
  1. var startRequestMethod = function(obj){  
  2.     var url = "http://www.xxxx.com?id=1";     
  3.     var ansyType = true//默认异步   
  4.     xmlhttp.open("get", url, ansyType); //这是个同步请求     
  5.     xmlhttp.send(null);  
  6.     if(ansyType){  //异步  
  7.        xmlhttp.onReadyStateChange = stateChange;  
  8.     }else{         //同步  
  9.        stateChange();  
  10.     }        
  11. }  

测试环境:IE8+FF3.6.6

0 0