У меня есть этот код Localweather App Я создал две функции.Передача переменной из одного вызова ajax другому
<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>
Функция getWeather, которая принимает в месте и возвращает объект погоды для этого места. У меня также есть функция getLocation, которую я хочу вернуть моему городу на основе ip (да, я знаю, что он не точный, но его то, что я хочу использовать).
Если я жестко привязываю город, он работает. Но попытка использовать город Переменная от функции getLoction не работает. Я предполагаю, что это как-то связано с асинхронностью, но я, хотя, используя обратный вызов в функции getLoction, вернет «город», который «будет» передан в getWeather. Или я понял, что все неправильно?
Что вы получите в консоли. журнальные звонки? –
Вам необходимо работать с (вложенными) обратными вызовами. –
Вам нужно связать вызовы методов, а затем успешно получить getLocation call getWeather с полученными данными. Посмотрите, как работают обратные вызовы ajax: http://api.jquery.com/jquery.getjson/ –