2

誰かがこの問題で私を助けてくれることを本当に望んでいます.このHTML5/Jqueryの組み合わせは完全に機能しているようですが、機能するには更新が必要です.

基本的に、私は HTML5 地理位置情報を使用してユーザーの緯度/経度をセッションに保存し、それを使用して他のことを行っています。私がそれを使って何をするかは問題ではありません。実際には、私に悲しみを与えている緯度/経度を保存しています。

私が使用しているコードは以下のとおりです。問題がどこにあるかを理解したところにコメントしました。

どんな助けでも大歓迎です!

<?php
session_start();
$url = $_SERVER["REQUEST_URI"];
?>
<script src="modernizr.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<script>
function getLocation()
  {
  if (navigator.geolocation)
    {
    navigator.geolocation.getCurrentPosition(showPosition);
    }
  }
function showPosition(position)
  {
localStorage.lat = position.coords.latitude;
localStorage.lon = position.coords.longitude;

  }

$(document).ready(function(){
    if (Modernizr.geolocation) {
        getLocation();
        //If I run getLocation() again here it works first time
        //A bit of debugging shows that this is where the lat/long values are being lost
        $.get("savetosession.php", {lat: localStorage.lat, lon: localStorage.lon}, function(result){
            $.get("dothis.php", {url:<?php echo $url; ?>}, function(result){
                $("div").html(result);
            });
        });
    }
});

</script>
<div></div>
4

1 に答える 1

1

問題は、$.getが実行される前に実行されるgetLocation()ことです (Javascript はノンブロッキングであるため)。

次のようなコールバックを使用できます。

<script>
        $(document).ready(function(){
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(function(position) {
                    localStorage.lat = position.coords.latitude;
                    localStorage.lon = position.coords.longitude;
                    $.get("savetosession.php", {lat: localStorage.lat, lon: localStorage.lon}, function(result){
                        $.get("dothis.php", {url:<?php echo $url; ?>}, function(result){
                            $("div").html(result);
                        });
                    });
                });
            } //endif
        });
</script>
于 2012-09-15T14:14:58.503 に答える