我遇到了ajax/promise的問題。我總共有兩個ajax請求,第二個ajax調用依賴數據由第一個ajax調用返回。如何用承諾鏈接兩個ajax請求
我的第一個ajax調用查找#search的緯度,經度和國家代碼。 我的第二個ajax調用查找該城市的天氣,但API URL取決於我的第一個ajax調用返回的緯度,經度和國家代碼。所以第二個Ajax調用在第一個Ajax調用完成之前無法啓動。
我的邏輯在於var ajax1被分配了一個promise,而var ajax2在ajax1.then()檢查ajax1的promise被解析後啓動。然後ajax2運行並返回另一個承諾。最後,ajax2.done在檢查ajax2的承諾解決後啓動,然後啓動我的successWeatherFunction()。
我的問題是,ajax2.done不能正常工作,因爲console.log(「test」)沒有顯示在控制檯上。兩個較早的console.logs,console.log(info)和console.log(weatherApiUrl)正在工作。
謝謝!
$("#search").keypress(function(event) {
if (event.which === 13) {
var searchCity = $("#search").val();
var jsonURL = "http://autocomplete.wunderground.com/aq?query=" + searchCity + "&cb=?"
var ajax1 = $.getJSON(jsonURL);
var ajax2 = ajax1.then(function(data) {
var info = [];
info.push(data["RESULTS"][0]["name"]);
info.push(data["RESULTS"][0]["c"]);
info.push(data["RESULTS"][0]["lat"]);
info.push(data["RESULTS"][0]["lon"]);
console.log(info);
var searchLat = info[2];
var searchLng = info[3];
var countryCode = info[1];
if (countryCode === "US") {
var weatherApiUrl = "https://api.forecast.io/forecast/{APIKEY}/" + searchLat + "," + searchLng + "?exclude=minutely" + "&callback=?";
} else {
var weatherApiUrl = "https://api.forecast.io/forecast/{APIKEY}/" + searchLat + "," + searchLng + "?exclude=minutely" + "?units=si" + "&callback=?";
console.log(weatherApiUrl);
}
return $.getJSON(weatherApiUrl);
});
ajax2.done(function(data){
console.log("test");
successCityWeather(data);
});
添加一些錯誤檢查...'ajax2.catch(函數(ERR){執行console.log(ERR);})有(......你做功能...);' –
http://jsfiddle.net/arunpjohny/pkbfn5bt/1/ –
just sayin,''?exclude = minutely「+」?units = si「'對我來說看起來像一個無效的URL部分 – Bergi