2017-01-10 8 views
0

Hier ist, was ich zu tun habe versucht:Get Wert außerhalb Funktion

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

Ich versuche, eine

console.log(fh); 

außerhalb $ .getJSON

zu tun, ist es möglich, die fh var außerhalb dieser Funktion zu bekommen? Ich versuche, dies und zeigt mir ein Fehler an der Konsole:

Uncaught ReferenceError: fh is not defined

+0

Warum sind Sie auf die Daten zugreifen versuchen, außerhalb der Funktion an erster Stelle? Was bedeutet "außerhalb dieser Funktion" überhaupt? Es wird wahrscheinlich nicht wie erwartet funktionieren. Bitte lesen Sie [Wie gebe ich die Antwort von einem asynchronen Anruf zurück?] (Http://stackoverflow.com/q/14220321/218196) und [Warum ist meine Variable unverändert, nachdem ich sie innerhalb einer Funktion geändert habe? - Asynchrone Code-Referenz (http://stackoverflow.com/q/23667086/218196), zwei der zehn am häufigsten gestellten JavaScript-Fragen zu Stack Overflow. –

+0

Ich versuche nur etwas zu lernen, Mann ... nimm es leicht. –

+0

Und ich versuche nur zu helfen. Wenn Sie erklären, warum und wo Sie auf die Daten "außerhalb der Funktion" zugreifen müssen, können wir Ihnen eine geeignete Lösung anbieten. Sie sollten niemals eine globale Variable verwenden müssen, um die Daten so zu teilen. Üblicherweise übergibt man die Antwort an eine andere Funktion, z. 'Funktion außerhalb (fh) {console.log (fh); } $ .getJSON (..., function (data) {outside (data);}); '. –

Antwort

1

warten müssen Sie sollten fh als globale Variable schaffen, wird dann erlauben, dass es innerhalb der getJSON Methode aktualisiert wird und außerhalb der Methode zugegriffen wird.

Es wird gleich undefined sein, bis eine Antwort von der getJSON Anfrage an den Server fällig ist.

Aus diesem Grund, und damit es funktioniert, sollten Sie setTimeout verwenden. In der Praxis sollten Sie promises verwenden, aber das kann außerhalb des Bereichs der Frage liegen. Solange der Server innerhalb von 2 Sekunden geantwortet hat, wird der Wert fh auf die vom Server zurückgegebenen Daten gesetzt.

Der folgende Code demonstriert dies.

var fh; 
 

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

 
setTimeout(function(){ 
 
    console.log(fh) 
 
}, 2000);

0

dieser Code nicht blockierende, so dass Sie zurückrufen Ausführung

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

fh = data; 
console.log(fh); 

}); 
+0

Während das natürlich möglich ist, loggt 'console.log (fh)' 'null'. Bitte erwähnen Sie dies und erklären Sie, was das OP stattdessen tun sollte. –

0

wenn Sie fh draußen etwas in Ihrer Logik

verwenden müssen, können Sie mit setInterval-Funktion arbeiten um

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

Während das funktioniert, ist es unnötig komplex. Es wäre viel sinnvoller, Daten nach dem Empfang an eine Funktion zu übergeben. –

Verwandte Themen