Функция Javascript jQuery не определяет переменные

#javascript #jquery

#javascript #jquery ( jquery )

Вопрос:

Я новичок в JavaScript и пытаюсь запустить функцию JavaScript / jQuery, где Firefox выдает мне следующую ошибку:

 Uncaught ReferenceError: latitude is not defined
    getHighLow http://localhost:5000/static/weatherballoon.js:54
    <anonymous> http://localhost:5000/static/weatherballoon.js:63
weatherballoon.js:54:5
 

Код, на который делается ссылка, приведен ниже.

 function getHighLow(){
    $.getJSON('https://maps.googleapis.com/maps/api/geocode/json?address='   cityID   'amp;key='   geocodekey, function(data){
        latitude = data.results[0].geometry.location.lat;
        longitude = data.results[0].geometry.location.lng;
    });
    $.getJSON('https://api.openweathermap.org/data/2.5/onecall?lat='  latitude  'amp;lon='  longitude  'amp;exclude={alerts,minutely,hourly}amp;appid='  owmkey, function(data){
        var tempmin = Math.round(data.daily[0].temp.min)   'amp;deg;';
        var tempmax = Math.round(data.daily[0].temp.min)   'amp;deg;';
        document.getElementById('tempmin').innerHTML = tempmin;
        document.getElementById('tempmax').innerHTML = tempmax;
    });
}```
 

Комментарии:

1. используйте var ключевое слово слева рядом с долготой

2. @UmairMubeen Я попытался использовать var, но ошибка все еще сохраняется

3. несте ваши запросы, они находятся на одной и той же «высоте» / уровне. Как это сделал @barmar в своем ответе.

Ответ №1:

$.getJSON() является асинхронным. Вы пытаетесь использовать переменные до того, как они будут установлены в обратном вызове.

Вам нужно выполнить второе getJSON в функции обратного вызова первого.

 function getHighLow() {
  $.getJSON('https://maps.googleapis.com/maps/api/geocode/json?address='   cityID   'amp;key='   geocodekey, function(data) {
    const latitude = data.results[0].geometry.location.lat;
    const longitude = data.results[0].geometry.location.lng;
    $.getJSON('https://api.openweathermap.org/data/2.5/onecall?lat='   latitude   'amp;lon='   longitude   'amp;exclude={alerts,minutely,hourly}amp;appid='   owmkey, function(data) {
      var tempmin = Math.round(data.daily[0].temp.min)   'amp;deg;';
      var tempmax = Math.round(data.daily[0].temp.min)   'amp;deg;';
      document.getElementById('tempmin').innerHTML = tempmin;
      document.getElementById('tempmax').innerHTML = tempmax;
    });
  });
} 

Ответ №2:

 function getHighLow(){
var latitude=0;
var longitude=0;
    $.getJSON('https://maps.googleapis.com/maps/api/geocode/json?address='   cityID   'amp;key='   geocodekey, function(data){
        latitude = data.results[0].geometry.location.lat;
        longitude = data.results[0].geometry.location.lng;
    });
    $.getJSON('https://api.openweathermap.org/data/2.5/onecall?lat='  latitude  'amp;lon='  longitude  'amp;exclude={alerts,minutely,hourly}amp;appid='  owmkey, function(data){
        var tempmin = Math.round(data.daily[0].temp.min)   'amp;deg;';
        var tempmax = Math.round(data.daily[0].temp.min)   'amp;deg;';
        document.getElementById('tempmin').innerHTML = tempmin;
        document.getElementById('tempmax').innerHTML = tempmax;
    });
}``` 

Комментарии:

1. Это предотвратит появление сообщения об ошибке, но не поместит возвращаемые значения во второй URL-адрес из-за асинхронности.