我試圖獲取地理位置數據,然後將該數據合併到$ ajax調用URL中。但是會發生什麼呢,console.log(緯度/經度)調用都會返回初始值(0)。這意味着,地理位置呼叫來不及回和$ Ajax調用簡單地使用默認值作出的:http://api.openweathermap.org/data/2.5/weather?lat=0&lon=0&appid=9011468f93d0dac073b28cda9e83cd01「
var lat = 0;
var lon = 0;
console.log(lat);
console.log(lon);
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(pos){
lat = pos.coords.latitude;
lon = pos.coords.longitude;
})
}
function getWeatherData() {
console.log(lat);
console.log(lon);
setTimeout(function(){
$.ajax({
url: "http://api.openweathermap.org/data/2.5/weather?lat=" + lat + "&lon=" + lon + "&appid=9011468f93d0dac073b28cda9e83cd01",
success: function (data) {
console.log(data);
},
error: function() {
console.log("REKT");
}
})
}, 1000);
}
$(document).ready(function() {
getWeatherData();
});
我解決它是附加了任意超時功能於$ Ajax調用,但如果什麼通話時間超過1000或10000ms返回? 所以,我的問題是有沒有一個更優雅的解決方案,使$ Ajax調用只有在地理位置代碼執行完畢?
我選擇這個作爲回答,只是因爲它是一個更加模塊化的解決方案。 我試着寫一些代碼來仔細看看數據流:http://pastebin.com/1w2fiXz8 因此,即使「初始化...」首先激發「成功」!僅在「啓動getWeatherData」之後才被記錄。我在編碼方面有點新,但是根據這個:調用回調函數,直到它回調(因此名稱),其他代碼繼續執行。 「成功!」僅在函數回調時執行?總之,回調函數本質上是異步的? – Anon
他們是一個異步調用的結論。 – mplungjan