判断数据类型:Object.prototype.toString.call()
- { } -> '[object Object]'
- [ ] ->'[object Array]'
- function( ){ } -> '[object Function]'
- null -> '[object Null]'
- undefined -> '[object undefined]'
- 123 -> '[object Number]'
- '123' -> '[object String]'
- true -> '[object boolean]'
封装ajax 结合promise
function ajax(option) {
let {
timeout = 0,
type = 'get',
cached = 'true',
dataType = 'text',
url,
data
} = option
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest()
xhr.timeout = timeout
if (Object.prototype.toString.call(data) === '[object Object]') {
let str =''
for (let key in data) {
str += key+'='+data[key]+'&'
}
data = str.substr(0,str.length-1)
}
if (type.toLowerCase() === 'get') {
let time = ''
!cached && (time = '_='+Date.now())
xhr.open(type, url+'?'+data+time,true)
xhr.send(null)
}
else if (type.toLowerCase() === 'post') {
xhr.open(type, url)
xhr.setRequestHeader('content-type','application/x-www-form-urlencoded')
xhr.send(data)
}
else {
throw new Error('目前只支持get和post请求')
}
xhr.onreadystatechange = function () {
if(xhr.readyState === 4){
if (xhr.status >= 200 && xhr.status < 300) {
if (dataType === 'xml') {
resolve(xhr.responseXML)
}
else if (dataType === 'json') {
let json = JSON.parse(xhr.responseText)
resolve(json)
}
else if (dataType === 'text') {
resolve(xhr.responseText)
}
}
else {
reject(xhr.status)
}
}
}
})
}