多個非同步請求執行順序問題。
阿新 • • 發佈:2019-02-06
情景一:
多個非同步請求,虛擬碼:
Ajax1();
Ajax2();
Ajax3();
這三個Ajax請求並不存在執行順序,也就是2和3並不會等第一個Ajax請求完成再去執行,而是直接執行如果想要達到順序執行的效果,可以通過回撥函式來完成,虛擬碼:
$.ajax({
url:"servletURL",
type:"post",//get
data:{},
dataType:"json",
success:function(data){
$.ajax({
url:"servletURL",
type:"post",//get
data:{},
dataType:"json",
success:function(data){
$.ajax({
url:"servletURL",
type:"post",//get
data:{},
dataType:"json",
success:function(data){}
});
}
});
}
});
這樣的話,三個非同步請求就會按順序執行。綠->紅->藍。
情景二:
非同步之後是普通操作:
var catName = "";
$.post("/item/cat/catName",{catId:data.cid},function(data){
catName = data;
},"text");
node.after("<span style='margin-left:10px;'>" + catName + "</span>");
對於上面的JS程式碼,是沒有意義的,也就是說是錯誤的,原因就在於,位於非同步請求下面的程式碼並不會等待非同步請求完成之後再執行,而是會直接執行 。
所以想要上面的程式碼有效,應該這樣寫:
var catName = "";
$.post("/item/cat/catName",{catId:data.cid},function(data){
catName = data;
node.after("<span style='margin-left:10px;'>" + catName + "</span>");
},"text");