Ich arbeite an einem Hausaufgabenprojekt, um eine API zur Anzeige des Wetters zu verwenden. Ursprünglich habe ich die Variablen "latty" und "lonny" am Anfang meines Skripts deklariert, im Hauptfunktionsbereich war alles andere drin, und später wurden sie mit Hilfe von navigator.geolocation auf den Längen- und Breitengrad gesetzt. Nachdem ich sie auf die Koordinaten gesetzt hatte, versuchte ich dann, sie als Teil der URL-Zeile zu verwenden, die an die API gesendet wurde, aber die Werte für Latty und Lonny wurden nie übertragen. Ich dachte, sie in der Elternfunktion zu deklarieren würde ihnen erlauben, in nachfolgenden verschachtelten Funktionen verwendet werden. Da die Entfernung zu kennen, eine Funktion benötigt, um Koordinaten zu erhalten, landete ich in der getPosition() Funktion das gesamte Skript zu Nest mit bis, um die Werte zu verwenden, um der Lage sein, die es abruft:Abrufen von Werten aus Variablen mit Funktionsumfang
this.addEventListener("load", navigator.geolocation.getCurrentPosition(getPosition));
function getPosition(position) {
var latty = position.coords.latitude;
var lonny = position.coords.longitude;
var url = "https://api.darksky.net/forecast/";
var apiKey = '5a4ae697ea6b02e5a4ae697ea6b02e/';
weatherAjax();
function weatherAjax(){
$.ajax({
url: url + apiKey + latty + "," + lonny + degreeType,
dataType: 'jsonp',
success: function(data) {
$("#weatherID").html("<h1>" + Math.round(data.currently.temperature) + degreeSymbol + data.currently.summary + "</h1>");
}
});
}
Gibt es eine bessere Möglichkeit, dies zu tun, ohne alles in getPosition() zu verschachteln? Es ist merkwürdig, dass ich keine Informationen aus der Geolokalisierung bekomme, diese Koordinaten auf eine Variable setze und sie in eine andere Funktion aufrufe. Ich konnte mir auch nicht vorstellen, wie ich diese Informationen zurückgeben sollte, und ich werde dieses Chaos hier nicht mit dir teilen, weil es schrecklich war.
Ich verstehe die Grundidee von Scope als: Sie können nur auf Variablen zugreifen, die in der Verschachtelungsreihenfolge "höher" sind. Geschwister- oder untergeordnete Funktionen teilen den Variablenzugriff nicht mit. Ist das richtig? Kann das verbessert werden?
Es klingt wie Sie können Funktionsumfang mit synchronen und asynchronen Code verwirren. Da Sie einen * Arbeits * -Code haben, ist dies kein vollständiges Duplikat. Aber die Antworten, die Sie suchen, sind wahrscheinlich hier: https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call – David
'getCurrentPosition()' ist asynchron. Sie können also erst auf die Daten zugreifen, wenn sie empfangen wurden. Es ist das gleiche wie zu versuchen, eine Pizza zu essen, die noch nicht geliefert wurde – charlietfl