使用AJAX将javascript变量传递给PHP时的未定义变量

时间:2014-01-12 20:20:25

标签: javascript php ajax geolocation

我正在尝试构建一个简单的移动应用程序来检查数据库,并根据用户的位置为用户提供正确的场所。基本上,我有两个文件:一个用geolocation,JavaScript和AJAX调用,另一个用php检查数据库并发回正确的结果。它本身的一切工作都非常好,但当我尝试将geolocation坐标发送给PHP时,它返回undefined。为什么它没有拿起坐标(它们会弹出一个单独的窗口)?我该如何解决?

这是我的geolocation和AJAX代码:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script>
            $( document ).ready(function() {

                var latitude;
                var longitude;

                if (navigator.geolocation) {
                  var timeoutVal = 10 * 1000 * 1000;
                  navigator.geolocation.getCurrentPosition(
                    displayPosition, 
                    displayError,
                    { enableHighAccuracy: true, timeout: timeoutVal, maximumAge: 0 }
                  );
                }
                else {
                  alert("Geolocation is not supported by this browser");
                }

                function displayPosition(position) {
                    var latitude = position.coords.latitude;
                    var longitude = position.coords.longitude;
                  alert("Latitude: " + position.coords.latitude + ", Longitude: " + position.coords.longitude);
                }


                function displayError(error) {
                  var errors = { 
                    1: 'Permission denied',
                    2: 'Position unavailable',
                    3: 'Request timeout'
                  };
                  alert("Error: " + errors[error.code]);
                }

                var request = $.ajax({
                    url: "http://cs11ks.icsnewmedia.net/mobilemedia/ajax.php?latitude=" + latitude + "&longitude=" + longitude,
                    type: "GET",       
                    dataType: "html"
                });

                request.done(function(msg) {
                    $("#ajax").html(msg);         
                });

                request.fail(function(jqXHR, textStatus) {
                    alert( "Request failed: " + textStatus );
                });
           });
    </script>

以下是处理这些变量的PHP:

if (isset($_GET['latitude']) && isset($_GET['longitude'])) {
                        $latitude = $_GET['latitude'];
                        $longitude = $_GET['longitude'];
                        echo "Geolocation seems to work...";
                        echo $latitude;
                        echo $longitude;
                        //continue here
                    }else{
                           echo "Hello. I am your geolocation and I am not working.";
                    }

我得到的是“地理定位似乎有效......未定义的定义”

3 个答案:

答案 0 :(得分:1)

Geolocation API是异步的,因此您必须等待结果返回

function displayPosition(position) {
    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;

    $.ajax({
         url      : "http://cs11ks.icsnewmedia.net/mobilemedia/ajax.php",
         data     : {latitude : latitude, longitude : longitude},
         type     : "GET",       
         dataType : "html"
    }).done(function(msg) {
         $("#ajax").html(msg);         
    }).fail(function(jqXHR, textStatus) {
         alert( "Request failed: " + textStatus );
    });
}

答案 1 :(得分:0)

function displayPosition(position) {
                var latitude = position.coords.latitude;
                var longitude = position.coords.longitude;
              alert("Latitude: " + position.coords.latitude + ", Longitude: " + position.coords.longitude);
            }

删除两个变量中的var。这两个在displayPosition外部不可见。当您使用$ .ajax调用时,您使用的是在$(document).raedy()下声明的纬度和经度,但您从未向它们分配任何内容,因此它们未定义。 希望这能解决你的问题。

P.S。您可以查看警报中的值,因为您使用的是位置而不是变量。

答案 2 :(得分:-1)

不要在displayPosition函数中使用var。您不希望在函数范围内声明新变量,您希望为先前在全局范围中声明的现有变量赋值。