HTML5: Geolocation-Callback



  • Hallo,

    ich habe Schwierigkeiten, eine globale Variable in der Geolocation-Callback-Funktion zu ändern. Ein eifnaches Beispiel:

    <script language="Javascript">
    var url;
    function getLocation()
      {
      if (navigator.geolocation)
        {
            navigator.geolocation.getCurrentPosition(showPosition);
        }
      else
        {
            alert("Geolocation is not supported by this browser.");
        }
      }
    function showPosition(position)
      {
        //do smth with coords
        url=768;
      }
    getLocation();
    document.write(url);
    </script>
    

    Es wird immer undefined geschrieben. Andere Frage: warum lässt sich getCurrentPosition() nicht global, sondern nur innerhalb einer Funktion aufrufen? Leider hat mir die API-Doku nicht viel geholfen. Danke für die Hinweise.


  • Mod

    Achtung: JavaScript APIs sind idR asynchron.

    So auch die Geolocation API hier. Das Problem ist folgendes: es dauert etwas bis die aktuelle Position bestimmt werden kann. zB muss der User erstmal aktzeptieren dass du die Geolocation ueberhaupt auslesen kannst, dann muss das GPS Signal erkannt werden oder ein WLAN Scan durchlaufen etc. Das ganze dauert.

    Deshalb uebergibst du GetCurrentPosition ein Callback das aufgerufen wird sobald die Position bekannt ist. Das kann dauern. Dein document.write geht aber davon aus, dass du die Position sofort bekommst. (deine getLocation Funktion returned ja sofort - sie tut ja nicht viel, nur ein Callback in der Geolocation API eintragen)

    JavaScript verwendet deshalb ueberall Callbacks. Nie nie nie so Sachen wie document.write verwenden. Die korrekte Implementierung von showPosition waere also, dort ein $('.location').text(url) zu machen.



  • Danke dir. Ich habe die Anwendung jetzt mit getElementById umgesetzt - ist im Prinzip das Gleiche, oder?


  • Mod

    [Rewind] schrieb:

    Danke dir. Ich habe die Anwendung jetzt mit getElementById umgesetzt - ist im Prinzip das Gleiche, oder?

    Ja.

    Aber ich würde dir wirklich raten jQuery zu verwenden.

    Letztens habe ich folgende Statistik erfahren: über 90% aller Top 1000 Webseiten die JavaScript verwenden, verwenden jQuery. Wenn das mal nicht ein Argument für jQuery ist, dann weiss ich auch nicht.



  • Shade Of Mine schrieb:

    Aber ich würde dir wirklich raten jQuery zu verwenden

    👍


Anmelden zum Antworten