jquery的ajax:Ajax的工具類
來源:互聯網
上載者:User
var Ajax={
xhr: null,
ok : true,
xhrPool: [],
createXHRObj : function(){
var xhrObj;
try {
if(window.XMLHttpRequest){
xhrObj = new XMLHttpRequest();
}else if(window.ActiveXObject){
var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP','MSXML2.XMLHTTP.6.0'];
for(var i=0;i<MSXML.length;i++){
try{
xhrObj = new ActiveXObject(MSXML[i]);
break;
}catch(e){
}
}
}
if (xhrObj.readyState == null)
{
xhrObj.readyState = 0;
xhrObj.addEventListener("load", function (){
xhrObj.readyState = 4;
if (typeof xhrObj.onreadystatechange == "function")
{
xhrObj.onreadystatechange();
}
}, false);
}
return xhrObj;
} catch (e) {
alert("XMLHttpRequest建立錯誤!");
}
},
getXhrInstance:function(){
for(var i=0;i<this.xhrPool.length;i++){
if (this.xhrPool[i].readyState == 0 this.xhrPool[i].readyState == 4)
{
return this.xhrPool[i];
}
}
this.xhrPool[this.xhrPool.length] = this.createXHRObj();
return this.xhrPool[this.xhrPool.length-1];
},
init:function(){
this.xhrPool = new Array();
},
setHeader:function(key, value){
var xhrObj = this.xhr;
try{
xhrObj.setRequestHeader(key,value);
}catch(e){
alert("設定Header異常:"+e.message);
}
},
//按類型解析資料
_parse:function(text,dtype){
var _data = null;
if(dtype == 'JSON'){
_data = text;
return eval('('+ _data +')');
}
return text;
},
//cbobj必須包含callback函數
sendDataForJson:function(data, url,method, cbobj){
try{
var xhrObj = this.getXhrInstance();
var msg="";
for(i=0;i<data.length;i++){
var obj = data[i];
if(i == data.length-1){
var v = obj.value;
msg += obj.key+"="+encodeURIComponent(encodeURIComponent(v));
}else{
var v = obj.value;
msg += obj.key+"="+encodeURIComponent(encodeURIComponent(v))+"&";
}
}
if(method == "GET"){
xhrObj.open(method,url+"?randnum=" + Math.random()+ "&" +msg,true);
xhrObj.setRequestHeader("Content-Type", "text/html");
xhrObj.setRequestHeader("Cache-Control", "no-cache");
xhrObj.setRequestHeader("CustomDataType","JSON");
xhrObj.send(null);
}else if(method == "POST"){
xhrObj.open(method,url+"?randnum="+Math.random(),true);
xhrObj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhrObj.setRequestHeader("Cache-Control", "no-cache");
xhrObj.setRequestHeader("Content-Length",msg.length);
xhrObj.setRequestHeader("Connection", "close");
xhrObj.setRequestHeader("CustomDataType","JSON");
xhrObj.send(msg);
}
var returnText = "";
xhrObj.onreadystatechange = function(){
if(xhrObj.readyState == 4){
if(xhrObj.status == 200){
returnText = xhrObj.responseText;
returnText = decodeURIComponent(decodeURIComponent(returnText));
cbobj.callback(Ajax._parse(returnText,xhrObj.getResponseHeader("CustomDataType")) );
}
}
//xhrObj.abort();
};
return returnText;
}catch(e){
alert('串連伺服器異常,錯誤原因:' + e.name + " 描述:" +e.message );
xhrObj.abort();
}
}
}
本文連結http://www.cxybl.com/html/wyzz/JavaScript_Ajax/20121127/34462.html