您的位置:首页 > 理论基础 > 计算机网络

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

2010-07-27 23:04 573 查看
在FireFox下,使用Ajax提交请求,而该请求是同步时,IE浏览器下正常使用的代码在FireFox下却不执行,主要是不执行onReadyStateChange这个方法体里面的代码,代码如下:

 

var xmlhttp = loadXMLDoc();
var startRequestMethod = function(obj){
var url = "http://www.xxxx.com?id=1";
xmlhttp.open("get", url, false);	//这是个同步请求
xmlhttp.send(null);
xmlhttp.onReadyStateChange = stateChange;  //注意这儿
}

var stateChange = function(){
if(xmlhttp.readyState == 4){
if (xmlhttp.status == 200){
//需要执行的代码
}else{
alert("操作失败!");
}
}
}

var loadXMLDoc = function(){
var xmlhttp = null;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else if (window.ActiveXObject){
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlhttp;
}


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

xmlhttp.onReadyStateChange = stateChange;    这句注掉,然后直接调用stateChange()方法。代码如下:
var startRequestMethod = function(obj){
var url = "http://www.xxxx.com?id=1";
xmlhttp.open("get", url, false);	//这是个同步请求
xmlhttp.send(null);
//xmlhttp.onReadyStateChange = stateChange;  //注意这儿
stateChange();
}


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

 
var startRequestMethod = function(obj){
var url = "http://www.xxxx.com?id=1";
var ansyType = true; //默认异步
xmlhttp.open("get", url, ansyType);	//这是个同步请求
xmlhttp.send(null);
if(ansyType){  //异步
xmlhttp.onReadyStateChange = stateChange;
}else{         //同步
stateChange();
}
}


测试环境:IE8+FF3.6.6

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息