日期:2014-05-16 浏览次数:20695 次
/**
* 异步通信Ajax
* @param {object} config
* <code>
var config={
action:"test.json",//请求的URL;
sync:true,//是否异步,默认异步true;
method:"get",//请求类型,默认get;
data:null,//post请求的数据;
loaded: funLoadOk//回调方法 ;
};
调用代码:
<script type="text/javascript" src="Ajax.js?t=0"></script>
<script type="text/javascript">
var funLoadOk=function(httpRequest){
alert(httpRequest.responseText);
}
var config={
action:"test.json",
sync:true,
method:"get",
data:null,
loaded: funLoadOk
};
var ajax=new Ajax(config);
ajax.load();
</script>
* </code>
*/
function Ajax(config){
this._config =config;
this.initXmlHttp=function(){
if(typeof XMLHttpRequest == "function")return new XMLHttpRequest();
var MsxmlArr =['MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP'];
if (window.ActiveXObject){
for(var i=0;i<MsxmlArr.length;i++){
try{
XMLHttpRequest =function(){
return new ActiveXObject(MsxmlArr[i]);
};
return new XMLHttpRequest();
}catch(e){
//创建失败跳过;
}
}
}
return null;
};
/**
* 给请求的URL添加一个随机数
* @param {string} url
*/
this.appendUrlRandom = function(url){
var rnd = "t=" + new Date().getTime();
if(url.indexOf("?")!=-1)url +="&" + rnd;
else url += "?" + rnd;
return url;
};
/**
* 状态
* @param {object} req
*/
this.stateOK = function(req){
var s = req.status || 0;
return ((s>=200)&&(s<300))||
(s==304)||
(s==1223)||
(!s && (location.protocol=="file:" || location.protocol=="chrome:"));
};
/**
* 加载完毕执行内容
* @param {XMLHttpRequest} xmlHttpRequest
*/
this.loaded=function(xmlHttpRequest){
//加载完毕执行内容
//xmlHttpRequest.responseText;
};
/**
* 加载失败执行内容
*/
this.loadFail=function(){
//
};
/**
* 给请求的URL添加一个随机数
* @param {string} url
*/
this.load = function(config){
var c=config || this._config;
var action = c.action || c,
sync = c.sync || true,
method = c.method || "get",
loaded = c.loaded || this.loaded,
data = c.data || null;
try {
var rpc=this.initXmlHttp();
var stateIsOk=this.stateOK;
action=this.appendUrlRandom(action);
alert(action);
if (rpc) {
rpc.open(method, action ,sync);
if(sync)rpc.onreadystatechange = function(){//异步请求
if (rpc.readyState == 4) {
if (stateIsOk(rpc)) {
loaded(rpc);
}
}
};
if(method=="post"){
rpc.setRequestHeader("content-length",data.length);
rpc.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
}
rpc.send(data);
if(!sync){if(rpc.readyState == 4)//同步请求
if(stateIsOk(rpc)) {
loaded(rpc);
}
}
}
}catch (exception) {
this.loadFail();
return null;
}
};
this.toString = function(){return "[object Ajax]";};
}
?测试的HTML页
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ajax测试页</title>
</head>
<body>
<script type="text/javascript" src="Ajax.js?t=0"></script>
<script type="text/javascript">
var funLoadOk=function(httpRequest){
alert(httpRequest.responseText);
}
var config={
action:"test.json",
sync:true,
method:"get",
data:null,
loaded: funLoadOk
};
var ajax=new Ajax(config);