varXHRRequest;
//創建XHR
function createXHR(){
? ? if(typeof XMLHttpRequest ?!= 'undefined'){//IE7+ chrome hotfox and so on
? ? ? ? return new XMLHttpRequest();
? ? }else if(typeof ActiveXObject!='undefined'){//IE7-
? ? if(typeof arguments.callee.activeXString!='string'){
? ? ? ? var version= ['MSXML2.XMLHTTP6.0','MSXMLHTTP3.0','MSXMLHTTP'];
? ? ? ? var len=version.length;
? ? for(vari=0;i<len; i++){
? ? ? ? try{
? ? ? ? new ActiveXObject(version[i]);
? ? ? ? arguments.callee.activeXString=version[i];
? ? ? ? }catch(ex){ }
? ? }
}
return new ActiveXObject(arguments.callee.activeXString);
// return new ActiveXObject("Microsoft.XMLHTTP"); ?//可以直接使用該方法兼容ie5/6
}else{
throw newError("No XHR object avaliable");
}
}
function XHRTools(option) {
if(!XHRRequest){
XHRRequest=createXHR();
}
var params= option.params;
var requestType="";
var url="";
var asyn= option.asyn=="undefined"?true:option.asyn;
var data="";
var dataType=params.dataType =="undefined"?"text":params.dataType;
var contentType= option.contentType=="undefined"?"application/x-www-form-urlencoded": option.contentType;
var timeout= option.timeout!="undefined"?option.timeout:2000;//IE8+
url=addURLParam(requestType,url,"name","milk");
//監測當前活動狀態readyState 0:未調用open 1:調用open未調用send ?2:調用send未接收到響應 3:接收到部分響應 ?4:接收到全部響應
//在open之前指定onreadystatechange可保證跨瀏覽器兼容性
//onload可以替代onreadystatechange事件,表示在接收到完整的響應數據時觸發
XHRRequest.onreadystatechange=function() {
if(XHRRequest.readyState==4){
try{
if((XHRRequest.status>=200&&XHRRequest.status<300) ||XHRRequest.status==304){//304表示請求的資源并沒有被修改,可以使用瀏覽器中緩存的版本
alert(XHRRequest.responseText);
}else{
alert("Request was unsucessful: "+XHRRequest.status);
}
}catch(ex){
//當超時時,status可能是4,如果在超時終止請求之后再訪問status屬性,就會導致錯誤,所以使用try catch語句
//這里可以處理超時事件
}
}
};
//onprogress事件會接收一個event對象,其target屬性是XHR對象。還有額外三個屬性:lengthComputable進度信息是否可用,position已接收字節數,totalSizegenju Content-Length響應頭部確定的預期字節數。
//在open之前添加。
XHRRequest.onprogress=function(event) {
vardivStatus=document.getElementById("status");
if(event.lengthComputable){//進度信息是否可用
divStatus.innerHTML="Received "+ event.position+" of "+event.totalSize +" bytes";
}
};
XHRRequest.responseType=dataType;
XHRRequest.open(requestType,url,asyn);
//在調用open之后,send之前,設置請求頭部信息
XHRRequest.setRequestHeader("Content-Type",contentType);
XHRRequest.setRequestHeader("myHeader","myValue");
XHRRequest.timeout=timeout;
XHRRequest.ontimeout=function() {
? ? alert("Request did not return in time.");
}
XHRRequest.send(data);
};
function addURLParam(requestType, url, key, value) {
url += (url.indexOf("?")== -1)?"?":"&";
if(requestType=='get'){
//get請求的參數名和值要encodeURIComponent
url +=encodeURIComponent(key)+"="+encodeURIComponent(value);
}else{
url += (key)+"="+(value);
}
returnurl;
};