学一下es6 promise的写法
- promise在new 的时候会立即执行let my_promise = new Promise(func(resolve,reject){}),resolve是成功的回调,reject是失败时的回调
// 测试promise请求,这个方法会返回一个promise对象
sendPromise(type,url,params){
const token = JSON.parse(localStorage.getItem('token'))
let myPromise = new Promise((resolve,reject)=>{
// 使用原生的XMLHttpRequest对象
let client = new XMLHttpRequest()
let str = 'access_token='+encodeURI(token.access_token)
for(let item in params){
str +='&'+item+'='+encodeURI(params[item])
}
//只是测试了一下GET方式所以就直接这样写了
client.open(type,url+'?'+str)
client.onreadystatechange = (result)=>{
// result.target 就表示client
if(result.target.readyState !== 4){
return
}
if(result.target.status === 200){
resolve(result.target.response)
}else{
reject(new Error(result.target.statusText))
}
}
client.responseType = 'json'
client.setRequestHeader('Accept','application/json')
client.send()
})
return myPromise
}
使用
// 测试,新的方法
getPromiseOpe(){
const type = 'GET'
const url = '/api/operating_records.json'
const params = {
user_session_key: this.session_key,
record_type: 'student_infos',
student_id: this.student_id,
per: 10,
page: this.page
}
this.http.sendPromise(type,url,params).then((json)=>{
// resolve
console.log('content: ',json)
},(error)=>{
// reject
console.error('出错了',error)
})
}
- 科普一些使用原生的XMLHttpRequest对象怎样发送带参数的请求
GET方式提交
xmlhttp.open("GET","testServlet.json?name="+userName,true);
xmlhttp.send(null);
POST方式提交
xmlhttp.open("POST","testServlet.json",true);
//POST方式需要自己设置http的请求头
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//POST方式发送数据
xmlhttp.send("name="+userName);
网友评论