Ich habe diesen Codepegel Localweather App Ich habe zwei Funktionen erstellt.Übergabe einer Variablen von einem Ajax-Aufruf an einen anderen
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
$(document).ready(function() {
var city = "Newcastle";
city = getLocation();
//set city to location from function;
console.log ("city undefined?" +city);
//this is undefind, why?
getWeather(city).then(function(data) {
console.log(data);
var weatherType = data.weather[0].description;
var weatherId = data.weather[0].id;
var tempF = Math.round(data.main.temp);
var tempC = Math.round((tempF - 32)/1.8);
var wind = data.wind.speed;
var name = data.name;
console.log(weatherType);
$('#weather').html(weatherType);
$('#temp').html(tempC + "°C");
$('#wind').html(tempF + "°F");
$('#icon').html(weatherId);
$('#location').html(name);
})
});
function getLocation() {
$.getJSON('http://ipinfo.io', function(data) {
console.log("data" + data);
city = data.city;
console.log("city" + city);
return city;
})
}
function getWeather(place) {
return $.getJSON('http://api.openweathermap.org/data/2.5/weather?q=' + place + '&units=imperial&APPID=90d625c068e3f3d7818b9e4237871e21');
}
</script>
A GetWeather-Funktion, die in einen stattfindet und gibt ein Wetter Objekt für diesen Standort. Ich habe auch eine getLocation-Funktion, die ich meine Stadt basierend auf IP zurückgeben möchte (ja, ich weiß, es ist nicht genau, aber es ist, was ich verwenden möchte).
Wenn ich die Stadt fest codiere funktioniert es. Aber versuchen, die Stadt Variable aus der GetLocation-Funktion zu verwenden funktioniert nicht. Ich vermute, es ist etwas damit zu tun gewesen asynchron, aber ich würde, dass durch einen Aufruf zurück in der GetLocation-Funktion würde es die "Stadt", die "dann" in die getWeather übergeben würde zurückgeben. Oder habe ich mein Denken falsch?
Was Sie in der Konsole. Anrufe protokollieren? –
Sie müssen mit (verschachtelten) Callbacks arbeiten. –
Sie sollten Ihre Methodenaufrufe ketten, also bei Erfolg von getLocation getWeather mit empfangenen Daten aufrufen. Sehen Sie hier, wie Ajax Callbacks funktioniert: http://api.jquery.com/jquery.getjson/ –