*/
/**
* 发送ajax请求的函数
* @param {object} obj 发送ajax的配置项
* @returns undefined
*/
function ajaxPromise(obj){
return new Promise(function(resolve, reject){
if(obj.url === undefined) throw new Error('请求地址不能为空')
if(Object.prototype.toString.call(obj.url) != '[object String]') throw new Error('请求地址错误')
if(obj.method === undefined) obj.method = 'get'
if(obj.method.toLowerCase() != 'get' && obj.method.toLowerCase() != 'post') throw new Error('请求方式只能是get或post')
if(obj.isAsync === undefined) obj.isAsync = true
if(Object.prototype.toString.call(obj.isAsync) != '[object Boolean]') throw new Error('isAsync必须是布尔值')
if(!obj.data) obj.data = null
var data = ''
if(obj.data != undefined){
if(Object.prototype.toString.call(obj.data) === '[object String]'){
if(!obj.data.includes('=')) throw new Error('data数据是非法的!')
data = obj.data
}else if(Object.prototype.toString.call(obj.data) === '[object Object]'){
var arr = []
for(var key in obj.data){
arr.push(key + '=' + obj.data[key])
}
data = arr.join('&')
}else throw new Error('data必须是字符串或对象')
if(obj.method.toLowerCase() === 'get') obj.url += '?' + data
}
if(obj.dataType === undefined) obj.dataType = 'json'
if(obj.dataType.toLowerCase() != 'json' && obj.dataType.toLowerCase() != 'xml' && obj.dataType.toLowerCase() != 'text') throw new Error('dataType只接受json、text、xml')
var xhr = new XMLHttpRequest;
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
if(xhr.status>=200 && xhr.status<300){
var res = '';
switch(obj.dataType.toLowerCase()){
case 'json':
res = xhr.responseText
res = JSON.parse(res)
break;
case 'xml':
res = xhr.responseXML
break;
case 'text':
res = xhr.responseText
break;
}
resolve(res)
}else reject()
}
}
xhr.open(obj.method, obj.url, obj.isAsync);
if(obj.method.toLowerCase() === 'post' && data){
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
xhr.send(data)
return
}
xhr.send()
})
}
/// 调用模板 //
/*
ajaxPromise({
url: '', // 请求地址 - 必填项
method: '', // 请求方式 - 可选项,默认get
data: '', // 请求主体 - 可选项 - 允许字符串/object
isAsync: true, // 是否异步 - 可选项 - 默认true
dataType: 'json', // 希望返回的数据格式 - 可选项 - 默认json - 允许json/xml/text
})
*/
使用promise构造函数封装ajax
最新推荐文章于 2024-06-16 16:38:32 发布