Вот что я пытаюсь сделать:

$.getJSON( "http://api.openweathermap.org/data/2.5/weather?lat="+latitude+"&lon="+longitude", function(data) { 
fh = data;
});

Я пытаюсь сделать

console.log(fh);

За пределами $. getJSON

Можно ли получить переменную fh вне этой функции? Я пытаюсь это и показывает мне ошибку в консоли:

Uncaught ReferenceError: fh не определено

0
Rafael Herculano 11 Янв 2017 в 01:57

4 ответа

Лучший ответ

Вы должны создать fh как глобальную переменную, которая затем позволит ему обновляться в методе getJSON и получать к нему доступ вне метода.

Он будет равен undefined до тех пор, пока не будет получен ответ от запроса getJSON на сервер.

По этой причине, и чтобы увидеть, как это работает, вы должны использовать setTimeout. На практике вы должны использовать promises, но это может выходить за рамки вопроса. Пока сервер отвечает в течение 2 секунд, значение fh будет установлено на данные, возвращаемые с сервера.

Код ниже демонстрирует это.

var fh;

$.getJSON("http://api.openweathermap.org/data/2.5/weatherlat=" + latitude + "&lon=" + longitude, function(data) { 
    fh = data;
});

setTimeout(function(){
  console.log(fh)
}, 2000);
1
Paul Fitzgerald 10 Янв 2017 в 23:07

Если вам нужно использовать fh снаружи для чего-то в вашей логике

Вы можете обойти с помощью функции setInterval

var fh=null;
$.getJSON("http://api.openweathermap.org/data/2.5/weatherlat="+latitude+"&lon="+longitude", function(data) {
    fh = data;
});

var interval=setInterval(function(){
        if(fh!=null){
           console.log(fh)
           clearInterval(interval)
        }
},500)
0
Ahmed Kesha 10 Янв 2017 в 23:11

Это неблокирующий код, так что вы должны ждать выполнения обратного вызова

$.getJSON( "http://api.openweathermap.org/data/2.5/weather?lat="+latitude+"&lon="+longitude", function(data) { 

fh = data;
console.log(fh);

});
0
Isaac 11 Янв 2017 в 00:08

В функции Side нам нужно установить значение

localStorage.setItem('fhname',fh);

За пределами функции нам нужно получить значение

localStorage.getItem('fhname');
0
Dharman 28 Авг 2019 в 07:59