写了一个最基本的Ajax实例
var param = {
url: '',
type: 'get',
data: {},
success: function() {},
error: function(){},
};
var ajax = function(param){
//创建xhr对象
var xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
//对传入的值进行前期处理,包括type/url/data
var type = (param.type || 'get').toUpperCase();
var url = param.url;
if(!url){
return
}
var data = param.data,
dataArr = [];
for(var k in data) {
dataArr.push(k + '=' + data[k]);
}
//为了避免取得的是缓存数据,为其添加一个唯一的id
dataArr.push('=' + Math.random());
//get还是post。url处理,open()。send()
if(type === "GET"){
url = url + "?" + dataArr.join("&");
xhr.open(type,url.replace(/\?$/g,''),true);
xhr.send();
}else if(type === "POST"){
xhr.open(type,url,true);
//像表单一样post数据,使用setRequestHeader来添加头部
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send(dataArr.join("&"));
}
//接收请求
xhl.onload = function(){
//成功
if(xhr.status === 200 || xhr.status === 304 ){
var res;
if(param.success && param.success instanceOf Function){
//获取字符串形式的响应数据
res = xhr.responseText;
if(typeOf res === 'String'){
//把字符串形式转换成JSON形式
res = JSON.parse(res);
param.success.call(xhr,res);
}
}
}else{
//失败
if(param.error && param.error instanceOf Function){
param.error.call(xhr,res);
}
}
}
}
```
复制代码