AJAX 原生js封装

本文主要介绍了如何通过原生JavaScript封装ajax请求,文中给出了具体的实现代码和详细的解释,希望对你有所帮助。 


代码实现:

//ajax请求封装
var ajax=function(conf) { // ajax操作
let url = conf.url,
data = conf.data,
senData = [], // 封装后的数据
async = conf.async !== undefined ? conf.async : true, // ture为异步请求
type = conf.type || 'get', // 默认请求方式get
dataType = conf.dataType || 'json',
contenType = conf.contenType || 'application/x-www-form-urlencoded',
success = conf.success,
error = conf.error,
isForm = conf.isForm || false, // 是否formdata
header = conf.header || {}, // 头部信息
xhr = '' // 创建ajax引擎对象
if (data == null) {
senData = ''
} else if (typeof data === 'object' && !isForm) { // 如果data是对象,转换为字符串
for (var k in data) {
senData.push(encodeURIComponent(k) + '=' + encodeURIComponent(data[k]))
}
senData = senData.join('&')
} else {
senData = data
}
try {
xhr = new ActiveXObject('microsoft.xmlhttp') // IE内核系列浏览器
} catch (e1) {
try {
xhr = new XMLHttpRequest() // 非IE内核浏览器
} catch (e2) {
if (error != null) {
error('不支持ajax请求')
}
}
};
xhr.open(type, type !== 'get' ? url : url + '?' + senData, async)
if (type !== 'get' && !isForm) {
xhr.setRequestHeader('content-type', contenType)
}
for (var h in header) {
xhr.setRequestHeader(h, header[h])
}
xhr.send(type !== 'get' ? senData : null)
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
if (dataType === 'json' && success != null) {
let res = ''
try {
res = eval('(' + xhr.responseText + ')')
} catch (e) {
console.log(e)
}
success(res) // 将json字符串转换为js对象
};
} else {
if (error != null) {
error('通讯失败!' + xhr.status)
}
}
}
}
};


几点说明:

IE7及其以上版本中支持原生的 XHR 对象,因此可以直接用: var oAjax = new XMLHttpRequest();
IE6及其之前的版本中,XHR对象是通过MSXML库中的一个ActiveX对象实现的。使用下面的语句创建: var oAjax=new ActiveXObject(’Microsoft.XMLHTTP’);

GET 请求方式是通过URL参数将数据提交到服务器的,POST则是通过将数据作为 send 的参数提交到服务器;POST 请求中,在发送数据之前,要设置表单提交的内容类型;


链接: https://www.fly63.com/course/25_1141