罗燕青吧 关注:2贴子:164
  • 0回复贴,共1

【软件开发】一段兼容FF,IE6,7,8的AJAX 回调框架

只看楼主收藏回复

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);};



1楼2011-07-02 19:02回复