一个实用的Ajax类
/*一个Ajax类*/
//创建一个XMLHttpRequest对象实例
var Ajax = function()
{
this.pool = new Array();//声明一个二维数组,做为XMLHttpRequest对象池
this.createXMLHttpRequest = function()
{
var objXMLHttp;
if(window.XMLHttpRequest)//火狐
objXMLHttp = new XMLHttpRequest();
else
{//IE
var MSXML = ['MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'];
for(var n = 0; n <MSXML.length;n++)
{
try
{
objXMLHttp = new ActiveXObject(MSXML[n]);
break;
}
catch(e)
{
}
}
}
return objXMLHttp;
}
this.getXMLHttpRequest = function(mark /*XMLHttpRequest标识*/)
{
if(mark != null)
{
for(var i =0;i< this.pool.length; i++)
{
if(this.pool[i]["mark"] == mark)
{//判断标识
if(this.pool["obj"].readState == 0 || this.pool[a]["obj"].readState == 4)
{//判断XMLHttpRequest的当前状态,0对象已建立,但末初始化,4完成
return this.pool[a]["obj"];
}
else
{
return "wait";
}
}
}
//没有相应mark标识的XMLHttpRequest对象,创建一个新的对象
this.pool[this.pool.length] = new Array();
this.pool[this.pool.length-1]["obj"] = this.createXMLHttpRequest();
this.pool[this.pool.length -1]["mark"] = mark;
return this.pool[this.pool.length -1]["obj"];
}
for (var i = 0; i < this.pool.length; i++)
{//mark 为NULL
if(this.pool[i]["obj"].readyState == 0 || this.pool[i]["obj"].readyState == 4)
{
return this.pool[i]["obj"];
}
}
this.pool[this.pool.length] = new Array();
this.pool[this.pool.length - 1]["obj"] = this.createXMLHttp();
this.pool[this.pool.length - 1]["mark"] = "";
return this.pool[this.pool.length - 1]["obj"];
}
this.sendReq = function(method,url,data,callback,mark,callbackError,extra)
{//成功返回调用callback(ojbXMLHttp),失败返回调用callbackError(objXMLHttp,[extra])
var objXMLHttp = getXMLHttpRequest(mark);
if(typeof(objXMLHttp)!= "object")
return false;
with(objXMLHttp)
{
try//加入随机数防止缓存
{
if(url.indexOf("?")>0)
{
url += "&randnum=" + Math.random();
}
else
{
url += "?randnum=" + Math.random();
}
open(method,url,true);//true异步,false同步
setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
//设定请求编码方式
setRequestHeader("If-Modified-Since",0);//no cache
if(data != null)
send(data);
onreadstatechange = function()
{
if(readyState == 4 && (objXMLHttp.status == 200 || objXMLHttp.status == 304))
{//status:304,Not Modified 200,OK
callback(objXMLHttp);
}
else
{//失败
if(typeof(callbackError) == "function")
{
if(extra != null)
callbackError(objXMLHttp,extra);
else
callbackError(objXMLHttp);
}
}
}
}
catch(e)
{
alert(e);
}
}
}
}
//创建一个XMLHttpRequest对象实例
var Ajax = function()
{
this.pool = new Array();//声明一个二维数组,做为XMLHttpRequest对象池
this.createXMLHttpRequest = function()
{
var objXMLHttp;
if(window.XMLHttpRequest)//火狐
objXMLHttp = new XMLHttpRequest();
else
{//IE
var MSXML = ['MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'];
for(var n = 0; n <MSXML.length;n++)
{
try
{
objXMLHttp = new ActiveXObject(MSXML[n]);
break;
}
catch(e)
{
}
}
}
return objXMLHttp;
}
this.getXMLHttpRequest = function(mark /*XMLHttpRequest标识*/)
{
if(mark != null)
{
for(var i =0;i< this.pool.length; i++)
{
if(this.pool[i]["mark"] == mark)
{//判断标识
if(this.pool["obj"].readState == 0 || this.pool[a]["obj"].readState == 4)
{//判断XMLHttpRequest的当前状态,0对象已建立,但末初始化,4完成
return this.pool[a]["obj"];
}
else
{
return "wait";
}
}
}
//没有相应mark标识的XMLHttpRequest对象,创建一个新的对象
this.pool[this.pool.length] = new Array();
this.pool[this.pool.length-1]["obj"] = this.createXMLHttpRequest();
this.pool[this.pool.length -1]["mark"] = mark;
return this.pool[this.pool.length -1]["obj"];
}
for (var i = 0; i < this.pool.length; i++)
{//mark 为NULL
if(this.pool[i]["obj"].readyState == 0 || this.pool[i]["obj"].readyState == 4)
{
return this.pool[i]["obj"];
}
}
this.pool[this.pool.length] = new Array();
this.pool[this.pool.length - 1]["obj"] = this.createXMLHttp();
this.pool[this.pool.length - 1]["mark"] = "";
return this.pool[this.pool.length - 1]["obj"];
}
this.sendReq = function(method,url,data,callback,mark,callbackError,extra)
{//成功返回调用callback(ojbXMLHttp),失败返回调用callbackError(objXMLHttp,[extra])
var objXMLHttp = getXMLHttpRequest(mark);
if(typeof(objXMLHttp)!= "object")
return false;
with(objXMLHttp)
{
try//加入随机数防止缓存
{
if(url.indexOf("?")>0)
{
url += "&randnum=" + Math.random();
}
else
{
url += "?randnum=" + Math.random();
}
open(method,url,true);//true异步,false同步
setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
//设定请求编码方式
setRequestHeader("If-Modified-Since",0);//no cache
if(data != null)
send(data);
onreadstatechange = function()
{
if(readyState == 4 && (objXMLHttp.status == 200 || objXMLHttp.status == 304))
{//status:304,Not Modified 200,OK
callback(objXMLHttp);
}
else
{//失败
if(typeof(callbackError) == "function")
{
if(extra != null)
callbackError(objXMLHttp,extra);
else
callbackError(objXMLHttp);
}
}
}
}
catch(e)
{
alert(e);
}
}
}
}

浙公网安备 33010602011771号