发送JavaScript变量到PHP

问题描述:

即时尝试在这里做的是发送一个JavaScript变量到PHP函数。我正在开发的是一个jQuery Mobile应用程序,您可以在达到特定的经度/纬度时进行检查。但是我在向PHP函数发送经度/纬度时遇到了问题。我发送它到一个PHP函数,因为我要做一个比较,我已经存储在我的数据库中的经度/纬度。发送JavaScript变量到PHP

这是我的代码。

 function testResults() { 

      if(navigator.geolocation) { 
       //Get the current position 
       navigator.geolocation.getCurrentPosition(function(position) { 
        var latitude = position.coords.latitude; 
        var longitude = position.coords.longitude; 
        document.write("lat", latitude); 
        document.write('<br /><br />'); 
        document.write("long", longitude); 
       }); 
      } else { 
       alert("Sorry... your browser does not support the HTML5 GeoLocation API"); 
      } 

     //////////// Here I tried with jQuery/Ajax. I know that it's wrong. 
     //////////// Im putting it here so that it maybe clarifies what Im 
     //////////// trying to do. 

      $.post("checkLocation.php", { 
       lat : latitude, 
       longi : longitude 
      }, function(data) { 
       alert("Data Loaded: " + data); 
      }); 

     //////////////////////////////////////////////////////////////////// 

     } 

     testResults(); 

我该如何解决这个问题?我用JSON尝试过,但我没有得到它的工作。任何帮助将不胜感激。

+0

显示你的PHP代码 – Distdev

+0

请发表您的应用程序的PHP端(使用参数的检索部分)> 并作出简洁(wellformed)JSON: {“LAT”:纬度,“LNG”:经度} –

+0

@frank_neff:这是一个对象字面值,而不是JSON。没有必要在那里报价。 AJAX库将对象序列化为格式良好的JSON,完全独立于源代码是否带引号。 – RoToRa

你的地理位置响应

你需要做的是在回调中之前你发送请求。

+0

林不知道我是否明白你的意思? – Oscar

尝试使用AJAX

http://api.jquery.com/jQuery.ajax/

你的处理程序应该是这样的:

$.ajax({ 
    type: "POST", 
    url: "checklocation.php", 
    data: "lat="+latitude+"&longi="+longitude 
}).done(function(msg) { 
    alert("Data Saved: " + msg); 
}); 
+0

非常感谢。它看起来非常有帮助。我会马上查找它。 – Oscar

+1

您也可以认真构建一个JSON对象,而不是仅仅构建一个发送数据的Javascript字符串: 'data:{lat:latitude,longi:longitude}' – Mattygabe

navigator.geolocation.getCurrentPosition(function(position) { 
       var latitude = position.coords.latitude; 
       var longitude = position.coords.longitude; 
       document.write("lat", latitude); 
       document.write('<br /><br />'); 
       document.write("long", longitude); 
      }); 

你有当地瓦尔这里经度和纬度。如果你想使用他们这个功能之外,您可以使用全局变量:

var latitude; 
var longitude; 
//... 
navigator.geolocation.getCurrentPosition(function(position) { 
       latitude = position.coords.latitude; 
       vlongitude = position.coords.longitude; 
       document.write("lat", latitude); 
       document.write('<br /><br />'); 
       document.write("long", longitude); 
      }); 

//usage(transfer) of vars 
+0

由于某种原因,这并不奏效。奇怪:S – Oscar

尝试使用回调AJAX请求(概念验证,如果一切正常,没有舒尔):

function testResults() 
{ 
    if (navigator.geolocation) 
    { 
     //Get the current position 
     navigator.geolocation.getCurrentPosition(function (position) 
     { 
      var latitude = position.coords.latitude; 
      var longitude = position.coords.longitude; 

      // do callback     
      $.ajax(
      { 
       type: "POST", 
       url: "checklocation.php", 
       data: "lat=" + latitude + "&lon=" + longitude 
      }).done(function (msg) 
      { 
       alert("Data Saved: " + msg); 
      }); 

     }); 
    } 
    else 
    { 
     alert("Sorry... your browser does not support the HTML5 GeoLocation API"); 
    } 
} 

testResults(); 

干杯。弗兰克

+0

参数(msg)有什么用途? – Oscar

+0

我已经看到jqXHR.done()在1.8中已被弃用。改为使用'success:function(){}'和'error:(){}'。 http://api.jquery.com/jQuery.ajax/ –