var $ = {};
$.ajax = ajax;
function json2url(json){
var arr = [];
//添加隨機(jī)因子
json.t = Math.random();
for(var name in json){
//進(jìn)行編碼
arr.push(name + "=" + encodeURIComponent(json[name]));
}
return arr.join("&");
}
//options:url,type,timeout,data,success,error
function ajax(options){
options = options || {};
if(!options.url){
return ;
}
options.type = options.type || "get";
options.timeout = options.timeout || 0;
options.data = options.data || {};
var str = json2url(options.data);
//1 創(chuàng)建
if(window.XMLHttpRequest){
var xhr = new XMLHttpRequest();
} else {
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
if(options.type == "get"){
//2 連接 open(方式,地址,是否異步)
xhr.open("get",options.url+"?"+str,true);
//3 發(fā)送 send ? xhr.send(null);
xhr.send();
} else{
//2 連接 open(方式,地址,是否異步)
xhr.open("post",options.url,true);
//設(shè)置請(qǐng)求頭
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//3 發(fā)送 send ? xhr.send(null);
xhr.send(str);
}
//4 接收
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){//完成
clearTimeout(timer);
//http狀態(tài) ?[200,300) 304
if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){
//成功
options.success && options.success(xhr.responseText);
} else {
//失敗
options.error && options.error(xhr.status);
}
}
};
if(options.timeout){
var timer = setTimeout(function(){
alert("超時(shí)了");
xhr.abort();//終止請(qǐng)求
},options.timeout);
}
}