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