javaScript AJAX

时间:2022-10-22 04:41:38

AJAX的实现

var sAjax = function () {
var sendMsg = {
url: "",
sendType: "POST",
ContentType: "application/x-www-form-urlencoded",
msgType: "JSON",
data: {},
success: function (data) { },
error: function (data) { },
send: function () {
var url = "";
if (sendMsg.sendType == "POST") {
url = sendMsg.url;
} else {
url = sendMsg.url + "?" + postData(sendData.data);
}
var xhr = new XMLHttpRequest();
xhr.open(sendMsg.sendType, url, true);
xhr.setRequestHeader("Content-type", sendMsg.ContentType);
xhr.onreadystatechange = function () {
var XMLHttpReq = xhr;
if (XMLHttpReq.readyState == 4) {
if (XMLHttpReq.status == 200) {
var text = XMLHttpReq.responseText;
if (sendMsg.msgType == "JSON") {
console.log(text);
sendMsg.success(eval('(' + text + ")"));
} else {
sendMsg.success(text);
}
} else {
sendMsg.error(XMLHttpReq.status);
}
}
};
xhr.send(postData(sendMsg.data));
}
}
function postData(obj) { // 转成post需要的字符串.
var str = "";
for (var prop in obj) {
str += prop + "=" + obj[prop] + "&"
}
return str;
};
return sendMsg;
}

注意1:

构造函数中的sendMsg内的send方法中不可使用this.的方式获取sendMsg对象中的属性,因为this是静态的,当使用var a =new sAjax()实例化对象时this就已经生成了,这个时候this中的属性还没有被赋值this.url=null。

注意2:

使用eval()函数转换json字符串时应当使用sendMsg.success(eval('(' + text + ")"))的方式进行解析,使用sendMsg.success(eval( text))会报错提示“VM444:1 Uncaught SyntaxError: Unexpected token