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

使用AJAX将javascript变量传递给PHP时未定义的变量,javascript,php,ajax,geolocation,Javascript,Php,Ajax,Geolocation,我正在尝试构建一个简单的移动应用程序,它可以检查数据库,并根据用户的位置为用户提供正确的地点。基本上,我有两个文件:一个是带有geolocation、JavaScript和AJAX调用的文件,另一个是带有php的文件,用于检查数据库并返回正确的结果。每件事情本身都运行得很好,但是当我尝试向PHP发送geolocation坐标时,它返回undefined。为什么它不拾取坐标(它们会在单独的窗口中弹出)?我怎样才能修好它 这是我的地理定位和AJAX代码: <script src="http:/

我正在尝试构建一个简单的移动应用程序,它可以检查数据库,并根据用户的位置为用户提供正确的地点。基本上,我有两个文件:一个是带有
geolocation
、JavaScript和AJAX调用的文件,另一个是带有php的文件,用于检查数据库并返回正确的结果。每件事情本身都运行得很好,但是当我尝试向PHP发送
geolocation
坐标时,它返回
undefined
。为什么它不拾取坐标(它们会在单独的窗口中弹出)?我怎样才能修好它

这是我的
地理定位
和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>

我得到的是“地理定位似乎可以工作…未定义”

地理定位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 );
    });
}

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

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()下声明的纬度和经度,但您从未为它们分配任何内容,因此它们是未定义的。 希望这能解决你的问题


另外,您使用警报中的值是因为您使用的是位置值,而不是变量值。

感谢您的快速回复!不幸的是,这没有帮助-现在什么都没有显示,所以我猜AJAX调用被破坏了。这应该可以工作,而且必须以这种或那种形式进行,同样,地理位置API是异步的,您不能在回调之外使用返回的数据。会弹出警报吗?您确定同源策略不是问题吗?我刚刚在手机上测试了它,以确保它不是仿真器故障。自警报后(“纬度:+position.coords.Latitude+”,经度:+position.coords.Latitude);不再有了,现在什么都没有了。但我也没有出错。只是一个空白页。我尝试将我的旧ajax代码(来自问号的代码)移动到displayPosition函数中,但它也不起作用。我在最上面声明了它们。在displayPosition函数中,我只是赋值。除非有另一种可能有用的方法,参见@FuMe-answer,基本上说的是相同的。如果您是“仅分配值”,则不应使用var关键字。通过在displayPosition函数中使用var,可以创建仅存在于该函数中的新变量。看见在ajax调用之前,您是否尝试将纬度和经度变量回显到控制台?当它们被发送到PHP脚本时,这可以确切地告诉您它们保存了什么。不幸的是,它们仍然显示为未定义。不过还是要谢谢你的帮助!将我的溶液与@adeneo one混合。你应该解决这个问题。所以等待地理定位api…然后进行ajax调用…这也是我认为的,它是有意义的。但是,每当我将这两个变量从displayPosition中取出时,它就会破坏ajax,而不会显示任何内容。当我把ajax放在这个函数中时,它也会停止工作。我已经在许多不同的配置中移动了这两个位,我总是得到相同的结果-空白页。空白页意味着php文件中有错误。尝试将ajax方法设置为post,并将$\u GET更改为$\u post。仍然是空白页。我不认为这是php的情况,因为这里的代码比我刚刚发布的要多。为了再次检查,我把它换成了一个txt测试文件。它也不这么叫。在displayPosition之外使用ajax,在displayPosition内部使用这两个变量——ajax可以工作。每当我将变量移出或将ajax放入displayPosition时,它都会中断。
function displayPosition(position) {
                var latitude = position.coords.latitude;
                var longitude = position.coords.longitude;
              alert("Latitude: " + position.coords.latitude + ", Longitude: " + position.coords.longitude);
            }