ajax请求同步实现
- 原生ajax的同步
原生ajax通过open(method, url, async) 方法设置同步
method:GET或POST
url: URL
async:请求异步(true)或同步(false)
var Ajax = {
get: function(url,callback){
var xhr=new XMLHttpRequest();
xhr.open('GET',url,false);
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if(xhr.status==200 || xhr.status==304){
console.log(xhr.responseText);
callback(xhr.responseText);
}
}
}
xhr.send();
},
post: function(url,data,callback){
var xhr=new XMLHttpRequest();
xhr.open('POST',url,false);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.onreadystatechange=function(){
if (xhr.readyState==4){
if (xhr.status==200 || xhr.status==304){
callback(xhr.responseText);
}
}
}
xhr.send(data);
}
}
- jquery ajax的同步
jquery是添加一个参数 async:false,即可实现同步
$.ajax({
type : "POST",
async: false,
contentType: "application/json;charset=UTF-8",
url : "~~~~",
data : JSON.stringify(list),
success : function(result) {
console.log(result);
},
error : function(e){
console.log(e.status);
console.log(e.responseText);
}
});
axios的同步实现
- async+await
async用于申明一个函数是异步的,await等待异步请求完成,
await只能在async方法中使用
async getInfoFn(){
const res = await axios.get(url,params);
}
- Promise封装axios并实现同步返回值
export function get(url, params){
return new Promise((resolve, reject) =>{
axios.get(url, {
params: params
}).then(res => {
resolve(res.data);
}).catch(err =>{
reject(err.data)
})
});}
export function post(url, params) {
return new Promise((resolve, reject) => {
axios.post(url, data)
.then(res => {
resolve(res.data);
})
.catch(err =>{
reject(err.data)
})
});
}