模擬ajax
// 封裝一個簡單的Ajax
// options是一個對象,里面可以包括的參數為:
// type: post或者get,可以有一個默認值
// data: 發送的數據,為一個鍵值對象或者為一個用&連接的賦值字符串
// onsuccess: 成功時的調用函數
// onfail: 失敗時的調用函數
let myAjax = (url, options) => {
let ajax,
data,
param = "",
type;
// create XML object
ajax = window.XMLHttpRequest ? new XMLHttpRequest() : new activeXObject("Microsoft.XMLHTTP");
// parse data
data = options.data ? options.data : -1;
if (typeof data == "object") {
for (let key in data) {
param += `${key}=${data[key]}&`;
}
} else {
param = `${data}?timeStamp=${new Date().getTime()}`;
}
param = param.replace(/&$/, "");
type = options.type ? options.type.toUpperCase() : "GET";
if (type == "GET") {
ajax.open("GET", `${url}?${param}`, true);
ajax.send();
} else {
ajax.open("POST", url, true);
ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
ajax.send(param);
}
//solve result
ajax.onreadystatechange = () => {
if (ajax.readyState === 4) {
if (ajax.status === 200) {
options.onsuccess(ajax.responseText, ajax);
} else {
if (options.onfail) {
options.onfail(ajax);
}
}
}
};
return ajax;
}