ie6 7 ajax无效,一段兼容FF,IE6,7,8的AJAX 回调框架

这段代码展示了如何创建一个Ajax对象并实现异步GET请求。通过onreadystatechange事件监听状态变化,当状态变为4且http状态码为200或0时,执行回调函数处理响应数据。如果出现错误,调用默认的错误处理函数。
摘要由CSDN通过智能技术生成

var ajax = new Object();

ajax.$x = function(url,onload,onerror,stateArray){

this.url = url;

this.req = null;

this.onload = onload;

this.onerror = (onerror) ? onerror : this.defaultError;

this.stateNum = (stateArray) ? stateArray : false;

this.loadXMLDoc(url);

};

ajax.$x.prototype = {

loadXMLDoc : function(url){

if(window.XMLHttpRequest){ //IE 不兼容此种格式的 XHR 申请 这个是为FF准备的

this.req = new XMLHttpRequest();

if(this.req.overrideMimeType){

this.req.overrideMimeType('text/xml');

}

}else if(window.ActiveXObject){ //IE 若干类型,具体不知

try{

this.req = new ActiveXObject("Msxml3.XMLHTTP");

}catch(e){

try{

this.req = new ActiveXObject("Msxml2.XMLHTTP");

}catch(e){

try{

this.req = new ActiveXObject("Microsoft.XMLHTTP");

}catch(e){}

}

}

}

if(this.req){

try{

var loader = this;

this.req.onreadystatechange = function(){ // XHR 对象的readystate 有四个状态,具体参考(《AJAX IN ACTION》)状态的改变会触发该事件,其中标记为4的状态表示回调函数调用成功,最为关键(个人认为最为关键)

loader.onReadyState.call(loader);

}

this.req.open('GET',url,true);

this.req.send(null);

}catch(err){

this.onerror.call(this);

}

}

},

onReadyState:function(){

var req = this.req;

var ready = req.readyState;

if(this.stateNum && ready >= 1 && ready <= 3){

this.stateNum[ready-1].call(this);

}else if(ready == 4){

var httpStatus = req.status;

if(httpStatus == 200 || httpStatus == 0){ // 我们平时遇到的404状态等都是httpStatus,其实httpStatus 在200 到299之间都可以认为是成功状态。

从服务器返回后,应该触发回调函数,onload,在我们的例子中,就是 callback 函数

this.onload.call(this);

}else{

this.onerror.call(this);

}

}

},

defaultError:function(){

alert("数据链接错误!"

+ "\n\nreadyStatus: " + this.req.readyStatus

+ "\nstatus: " + this.req.status

+ "\nheafer: " + this.req.getAllResponseHeaders()

)

}

};

function callback(){

var res = this.req.responseText;

};

var ajax_get_answer = function(){

var url = "gameAjax.do?state=";

for(var i = 0;i < elements.length;i++){

url = url + elements[i].children[0].value;

}

new ajax.$x(url,callback,null);

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值