首先,我知道標題看起來與自己相矛盾。執行2個異步AJAX請求,一個接一個
但是,我的問題是,我要麼一個接一個地調用2個AJAX函數,要麼調用第二個AJAX函數。
讓我把它放到上下文中..我正在寫一個「商店定位器」應用程序。默認情況下,所有結果都按字母順序加載。用戶可以將他們的地址或郵編輸入框中並點擊搜索。然後,我的應用程序將使用Google的地理編碼API從他們的輸入中找到他們的經緯度座標,然後將這些座標傳遞到我自己的AJAX調用中,然後根據他們的位置排序結果,最靠近的商店位於第一位。
但是,如果用戶沒有輸入郵編,我想回到默認狀態,並再次按字母順序顯示結果。
到目前爲止...
function generateResults(_postcode) {
//console.log("generating results");
if (readyState) {
changeReadyState(false);
jQuery.ajax({
url: "http://maps.googleapis.com/maps/api/geocode/json?address=" + encodeURIComponent(_postcode) + ",UK&sensor=false",
success: function(d){
var _u = ajax_url;
if (d.results && d.results[0] && d.results[0].geometry && d.results[0].geometry.location) {
var location = d.results[0].geometry.location;
_u = appendQS(_u, "lat=" + location.lat); // Appends as query string, putting either ? or & before
_u = appendQS(_u, "lng=" + location.lat);
jQuery.ajax({
url: _u,
success: function(data){
changeReadyState(true);
},
error: function(){
changeReadyState(true);
},
async: false
});
}
else if (d.error_message) {
alert(d.error_message);
changeReadyState(true);
}
else {
alert("No results found for '" + _postcode + "'");
postcodeTxt.val("");
changeReadyState(true);
}
},
error: function(){
changeReadyState(true);
}
});
}
else {
//console.log("Application busy, try again soon");
}
}
我想我可能只是有2箱子取決於_postcode
是否爲空,但是這將意味着重複的代碼。
基本上我只想調用谷歌地理編碼API,如果_postcode
字段不是空的,但我想確保這個調用要麼沒有提前,要麼在我調用我自己的AJAX之前完成。
我看過使第一個請求同步,但根據jQuery文檔,它已被棄用,他們建議使用它們的成功/錯誤/完整回調。
我有一種感覺,它只是在一天晚了一點!
乾杯
使用某種回調類型,大多數AJAX API不僅具有成功功能:function(){}回調函數,而且還包含完整的:。您可以使用完整的{}方法來觸發您的第二個電話,以確保它們不會一起觸發。 – Rottingham