原生js代码实现ajax
```ajax: function (cObj) {
var thisTemp = this;
var callback = null;
var obj = {
method: "get",
dataType: "json",
charset: "utf-8",
async: false,
url: "",
data: null,
success: null,
error: null,
};
if (this.varType(cObj) != "object") {
this.eject(this.errorList[9]);
return;
}
obj = this.standardization(obj, cObj);
if (
obj.dataType === "json" ||
obj.dataType === "text" ||
obj.dataType === "html" ||
obj.dataType === "xml"
) {
var xhr = this.createXHR();
callback = function () {
if (xhr.status == 200) {
if (thisTemp.isUndefined(obj.success)) {
return;
}
if (obj.dataType === "json") {
try {
obj.success(eval("(" + xhr.responseText + ")"));
} catch (event) {
if (!thisTemp.isUndefined(obj["error"])) {
obj.error(event);
}
}
} else {
obj.success(xhr.responseText);
}
} else {
obj.success(null);
thisTemp.eject(thisTemp.errorList[10], "Ajax.status:" + xhr.status);
}
};
obj.url =
obj.url.indexOf("?") == -1
? obj.url + "?rand=" + this.randomString(6)
: obj.url;
obj.data = this.formatParams(obj.data);
if (obj.method === "get" && !this.isUndefined(obj.data)) {
if (obj.data != "") {
if (obj.url.indexOf("?") == -1) {
obj.url += "?" + obj.data;
} else {
obj.url += "&" + obj.data;
}
}
}
if (obj.async === true) {
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && callback != null) {
callback();
}
};
}
xhr.open(obj.method, obj.url, obj.async);
if (obj.method === "post") {
try {
xhr.setRequestHeader(
"Content-Type",
"application/x-www-form-urlencoded"
);
xhr.setRequestHeader("charset", obj["charset"]);
xhr.send(obj.data);
} catch (event) {
callback();
}
} else {
try {
xhr.send(null);
} catch (event) {
callback();
}
}
if (obj.async === false) {
callback();
}
} else if (obj.dataType === "jsonp") {
var oHead = document.getElementsByTagName("head")[0];
var oScript = document.createElement("script");
var callbackName = "callback" + new Date().getTime();
var params = this.formatParams(obj.data) + "&callback=" + callbackName;
callback = obj.success;
oScript.src = obj.url.split("?") + "?" + params;
oHead.insertBefore(oScript, oHead.firstChild);
window[callbackName] = function (json) {
callback(json);
oHead.removeChild(oScript);
};
}
},
这段代码是取自ckplayer的源码片段----发现源码里面有很多很香的东西,先把代码粘贴在这里,后期会更新自己对这段代码的学习理解。