0

HTML5経由で座標を取得しています。しかし、AJAX 投稿で座標を保存しようとすると、何も挿入されません。savespot.php は機能するので、おそらく ajax 投稿の問題でしょうか? または、座標が取得される前に ajax post が実行されますか?

<!DOCTYPE html>
<html>
    <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
    <body>
        <p id="demo">Click the button to get your position:</p>
        <button onclick="getLocation()">Get your location</button>
        <div id="mapholder"></div>
        <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
        <script>
            var x=document.getElementById("demo");
            function getLocation()
            {
                if (navigator.geolocation)
                {
                    navigator.geolocation.getCurrentPosition(showPosition,showError);
                }
                else{x.innerHTML="Geolocation is not supported by this browser.";}
            }
            function showPosition(position)
            {
                lat=position.coords.latitude;
                lon=position.coords.longitude;
                latlon=new google.maps.LatLng(lat, lon)
                mapholder=document.getElementById('mapholder')
                mapholder.style.height='250px';
                mapholder.style.width='500px';
                var myOptions={
                    center:latlon,zoom:14,
                    mapTypeId:google.maps.MapTypeId.ROADMAP,
                    mapTypeControl:false,
                    navigationControlOptions:{style:google.maps.NavigationControlStyle.SMALL}
                };
                var map=new google.maps.Map(document.getElementById("mapholder"),myOptions);
                var marker=new google.maps.Marker({position:latlon,map:map,title:"You are here!"});
            }
            function showError(error)
            {
                switch(error.code)
                {
                    case error.PERMISSION_DENIED:
                        x.innerHTML="User denied the request for Geolocation."
                        break;
                    case error.POSITION_UNAVAILABLE:
                        x.innerHTML="Location information is unavailable."
                        break;
                    case error.TIMEOUT:
                        x.innerHTML="The request to get user location timed out."
                        break;
                    case error.UNKNOWN_ERROR:
                        x.innerHTML="An unknown error occurred."
                        break;
                }
            }
        </script>
        <script>
            function ajaxFunction()
            { 
                $.ajax({ 
                    url:'savespot.php', 
                    type:'POST', 
                    data:'lat='+lat+'&lon='+lng, 
                    success:function(d){ 
                        console.log(d); 
                    }, 
                    error(w,t,f){ 
                        console.log(w+' '+t+' '+f); 
                    } 
                }); 
            }
        </script>
    </body>
</html>

savespot.php

<?php

    include_once 'includes/db.php';

    //  $x = "52.364659"; 
    //  $y = "13.191007"; 
    $nick = "GPSTEST";
    $adress = "Odefinierat";

    $x = @$_POST['lat'];
    $y = @$_POST['lng'];


    $sql = 'INSERT INTO location ' .
            '(name, address, lat, lng, date) ' .
            'VALUES ("' . $nick . '", "' . $adress . '", "' . $x . '", "' . $y . '", NOW())';

    $retval = mysql_query($sql, $connection);
    if (!$retval) {
        die('Could not enter data: ' . mysql_error());
    }
    echo "Entered data successfully\n";
?>
4

4 に答える 4

1

AJAX セットアップにエラーがあります。

$.ajax({ 
    url:'savespot.php', 
    type:'POST', 
    data:'lat='+lat+'&lon='+lng, 
    success:function(d){ 
        console.log(d); 
    }, 
    error(w,t,f){ 
        console.log(w+' '+t+' '+f); 
    } 
});

error:の前に与える必要がありerror(w,t,f){}ます。

    error: error(w,t,f){ 
        console.log(w+' '+t+' '+f); 
    } 
于 2012-10-04T08:44:18.227 に答える
0

次のように ajax データを宣言してみてください。

$.ajax({ 
  url:'savespot.php', 
  type:'POST', 
  data:{
    lat:lat,
    lon:lng
  }
}); 
于 2012-10-04T08:45:32.767 に答える
0

あなたが をどこでどのように呼び出しているのかわかりajaxFunctionません。確信が持てないことを知らずに、位置が取得される前に Ajax リクエストを行ったのではないかと思います。

navigator.geolocation.getCurrentPositionは非同期であり、ページが地理位置情報を取得することをユーザーが受け入れるまで待機します。そうなるまで、関数は何も返しません。これを処理する最善の方法は、 のコールバックで ajax-request を作成するgetCurrentPositionことです。これにより、呼び出しを行う前に、自分が位置を持っていることを確認できます。

あなたの場合、それはあなたがajaxFunction()内から呼び出すことを意味しますshowPosition()

于 2012-10-04T08:44:39.787 に答える
-2

変数 lat と lon はグローバル スコープで宣言する必要があると思います。つまり、showPosition() 関数から宣言する必要があります。

于 2012-12-05T21:31:01.873 に答える