所以我試圖在JavaScript中運行一個函數,但是我需要所有其他函數在該啓動之前運行並完成。下面的代碼(對不起,我知道這是很長,但它的唯一途徑我可以說明發生了什麼):其他完成後的消防功能javascript
getWeather();
getAverage();
function getWeather() {
$.getJSON("http://where.yahooapis.com/geocode?q=" + lat + ",+" + lon + "&gflags=R&flags=J", function(data){
zipCode = data.ResultSet.Results[0].postal;
zipCode = zipCode.substring(0,5);
WOEID = data.ResultSet.Results[0].woeid;
getYahooWeather(WOEID);
getWeatherbug(zipCode);
getWeatherUnderground(zipCode);
getWorldWeather(zipCode);
});
}
function getYahooWeather(x) {
var query = escape('select item from weather.forecast where woeid="'+x+'"');
var url = "http://query.yahooapis.com/v1/public/yql?q=" + query + "&format=json";
$.getJSON(url, function(data2){
yahooTemp = data2.query.results.channel.item.condition.temp;
$("#yahoo-weather p").replaceWith("<p>Weather from Yahoo! powered by The Weather Channel = "+yahooTemp+"°F</p>");
});
}
function getWeatherbug(x) {
var url = "http://i.wxbug.net/REST/Direct/GetObs.ashx?api_key="+ weatherbugAPI + "&zip="+x+"&ht=t&ic=1&f=?";
console.log(url);
$.ajax({
url: url,
dataType: "jsonp",
success: function(data3) {
//console.log(data3.temperature);
wbTemp = data3.temperature;
$("#wb-weather p").replaceWith("<p>Weather from WeatherBug = "+wbTemp+"°F</p>");
}
});
}
function getWeatherUnderground(x) {
$.ajax({
url: "http://api.wunderground.com/api/b87325296cd69fa8/geolookup/conditions/q/IA/"+x+".json",
dataType: "jsonp",
success: function(parsed_json) {
var location = parsed_json['location']['city'];
wuTemp = parsed_json['current_observation']['temp_f'];
$("#wu-weather p").replaceWith("<p>Weather from Weather Underground = "+wuTemp+"°F</p>");
}
});
}
function getWorldWeather(x) {
var url = "http://free.worldweatheronline.com/feed/weather.ashx?key="+wwKey+"&q="+x+"&fx=no&format=json";
$.ajax({
url: url,
dataType: "jsonp",
success: function(data6) {
wwTemp = data6.data.current_condition[0].temp_F;
$("#ww-weather p").replaceWith("<p>Weather from World Weather Online = "+wwTemp+"°F</p>");
}
});
}
function getAverage() {
avTemp = wbTemp + wwTemp + yahooTemp + wuTemp;
console.log(avTemp);
}
我遇到的問題是,每當我運行getAverage函數將返回NaN的,因爲其他功能的避風港尚未返回他們的數據。
是否有一種方法可以在所有先前函數返回其數據之後運行函數?
感謝
不是簡單地將調用移到getWorldWeather(zipCode)之後出現;工作? – ccKep