jQuery ajax順序的問(wèn)題是一個(gè)很常見(jiàn)的困擾前端開(kāi)發(fā)者的問(wèn)題。在前端開(kāi)發(fā)中,使用ajax從服務(wù)器異步請(qǐng)求數(shù)據(jù)來(lái)實(shí)現(xiàn)網(wǎng)頁(yè)動(dòng)態(tài)更新已經(jīng)成為一項(xiàng)非常重要的技術(shù)。
如何保證ajax的順序有序進(jìn)行呢?這里有一些技巧。
function getAjaxData() {
$.ajax({
url: "/data1.json",
method: "GET",
success: function(data) {
console.log(data);
},
error: function() {
console.log("error");
}
});
$.ajax({
url: "/data2.json",
method: "GET",
success: function(data) {
console.log(data);
},
error: function() {
console.log("error");
}
});
}
如上代碼所示,ajax請(qǐng)求是異步的,多個(gè)ajax請(qǐng)求同時(shí)發(fā)起,但是無(wú)法保證它們的順序執(zhí)行,可能會(huì)出現(xiàn)如下的順序:
//log: /data2.json的數(shù)據(jù)
//log: /data1.json的數(shù)據(jù)
若想保證ajax的請(qǐng)求順序,可以使用jQuery的Deferred對(duì)象,從而實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用:
function getAjaxData() {
$.ajax({
url: "/data1.json",
method: "GET"
}).done(function(data) {
console.log(data);
return $.ajax({
url: "/data2.json",
method: "GET"
});
}).done(function(data) {
console.log(data);
}).fail(function() {
console.log("error");
});
}
這里使用了Deferred對(duì)象的done()和fail()方法,其中done()方法用于在請(qǐng)求成功時(shí)做一些事情,fail()方法則是在請(qǐng)求失敗時(shí)可做些處理。這種寫法可以保證請(qǐng)求的順序,先請(qǐng)求data1.json,再請(qǐng)求data2.json,最終輸出的結(jié)果為:
//log: /data1.json的數(shù)據(jù)
//log: /data2.json的數(shù)據(jù)
總的來(lái)說(shuō),在使用ajax時(shí),如果要確保請(qǐng)求的順序不會(huì)混淆,可以使用Deferred對(duì)象來(lái)實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用。