一,首先肯定需要创建一个XMLHttpRequest对象
function createXHR(){//创建XMLHttpRequest对象
if(typeof XMLHttpRequest != "undefined"){
return new XMLHttpRequest();
} else if (typeof ActiveXObject != "undefined"){
if(typeof arguments.callee.activeXString != "string"){
var versions = [ "MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"],i,len;
for(i = 0,len = versions.length; i < len; i++){
try{
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
} catch (ex){
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
}
else {
throw new Error("No XHR object available");
}
}
二,定义ajax通用函数,通过传递参数控制请求方式与是否异步等
function addURLParam(url,name,value){//给get请求加上参数
url += (url.indexOf("?") == -1 ? "?" : "&");
url += encodeURIComponent(name) + "=" + encodeURIComponent(value);
return url;
}
addURLParam函数是为在get方式下传输参数使用,以url?a=1&b=2的方式传递
function ajax(type,url,data,async,callback){
var xhr = eventObject.createXHR();
if(type == "get"){
for(var s in data){
url = eventObject.addURLParam(url,s,data[s]);
}
xhr.open(type,url,async);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(null);
if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
var result = eval(xhr.responseText);
callback(result);
}
}
else if(type == "post"){
xhr.open(type,url,async);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
var str = "",i=1;
for(var s in data){
if(i==1){
str += s+"="+data[s];
}
else {
str += "&"+s+"="+data[s];
}
i++;
}
xhr.send(str);
if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
var result = eval(xhr.responseText);
callback(result);
}
}
}
}
type参数可以选择post或者get,data是要传递的参数(以对象的形式封装),async定义是否异步,callback(result)为回调函数,其中result参数是接受到的值(一般为json数据格式)