php - 使用 AJAX 将 lat 和 lng 变量发送到 PHP 以进行邻近度计算

标签 php mysql ajax jquery geolocation

首先,提前感谢您提供的所有见解和帮助。

我有一个 MySQL 数据库(实际上是单表),其中有 9 个条目用于测试。字段包括 id、name、address、city、state、zip、lat、lng 等。我的目标是加载一个启用位置感知的主页,使用 Javascript 将用户纬度和经度设置为变量,然后使用 AJAX,发送那些变量到另一个 .php 页面,以便可以将变量放入我的查询中的计算公式中。还有第二个 AJAX 实例,它会在发送变量并处理整个页面后从服务器获取查询结果。

我的第二个 AJAX 实例非常成功地调用了第二页的结果。如果我手动设置变量,我会得到很好排序的列表,如果我依赖 Javascript 变量,我会收到错误消息。我不确定哪里出错了。

我知道这似乎是一个重复的问题。在过去的 8 个小时里,我一直在阅读其他我希望对我有所帮助的问题。不幸的是,我尝试过的每个例子都不起作用。

我的主页 (test.php) 上的代码是这样的:

<html><head></head><body>
<script type="text/javascript">
if(navigator.geolocation)
  {
  navigator.geolocation.getCurrentPosition(function(position)
   {
  var lat = position.coords.latitude;
  var lng = position.coords.longitude;
$.ajax({
        type: "POST", 
        url:  "locations-ajax.php", 
        data: 'x='+lat+'&y='+lng,
        });  
 });
}
</script>
<!--begin list area-->
<script>
function getXMLHttp()
{
var xmlHttp
try
{
//Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
}
catch(e)
{
//Internet Explorer
try
{
  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
  try
  {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  catch(e)
  {
    alert("Your browser does not support AJAX!")
    return false;
  }
}
}
return xmlHttp;
}
function MakeRequest()
{
var xmlHttp = getXMLHttp();
xmlHttp.onreadystatechange = function()
{
if(xmlHttp.readyState == 4)
{
  HandleResponse(xmlHttp.responseText);
}
  }
 xmlHttp.open("GET", "locations-test.php", true); 
 xmlHttp.send(null);
}

function HandleResponse(response)
{
document.getElementById('listarea').innerHTML = response;
}
</script>
<div class="container"><input type='button' onclick='MakeRequest();' value='Get List'/></div>
<div class="container"><div id="listarea">
</div></div></div>
</body>
</html>

我生成排序列表的页面是这样的:(locations-test.php)

<?php
/*   $x = 32.839001;
$y = -79.852316;   */
mysql_connect("localhost", "root", "") or die(mysql_error());
 echo "Connected to MySQL<br />";
mysql_select_db("test_db") or die(mysql_error());
 echo "Connected to Database <br>";
// Make a MySQL Connection
  $x = @$_POST['x'];
  $y = @$_POST['y']; 
 if (!empty($x)){
        echo 'x not empty';
    }else{
        echo 'x is not set or empty';
    }
    echo "$x";
 echo "<br>";
    if (!empty($y)){
        echo 'y not empty';
    }else{
        echo 'y is not set or empty';
    }
 echo "<br>";  

$query = "SELECT * , ( 3959 * acos( cos( radians($x) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($y) ) + sin( radians($x) ) * sin( radians( lat ) ) ) ) AS distance FROM locations HAVING distance < 2500 ORDER BY distance LIMIT 0 , 20;"; 
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array( $result )) {
    echo "<div class='row'><div class='logo'><img src='foo.png' width='20' height='20'></div><div class='siteblock'><div class='sitename'>"; 
    echo $row['site_name'];
    echo "</div><div class='address'>"; 
    echo $row['street_number'];
    echo " ";  
    echo $row['street_name'];
    echo "</div></div></div>"; 
}
?>

我已将测试留在代码中,但已注释掉。如果我为变量分配一个值,我会在我的表中得到正确的结果,并且它会很好地输出到 test.php。

该页面可以很好地连接到数据库,但是 lat 和 lng 的值不会从 test.php 传递到 locations-test.php。

我真的不确定我错过了什么,但希望它很简单。我正在使用 PHP 5.4.3、MySQL 5.5.24 和 Apache 2.2.22 运行 WAMP 64 位。

我宁愿希望这是我的疏忽而不是其他任何事情。

最佳答案

因为您使用的是 jQuery,所以完全没有必要使用 XMLHTTP 函数。此外,您似乎正试图通过 jQuery 发送数据并通过 XMLHTTP 检索;那是不正确的。您可以像这样重写代码:

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function (position) {
        $.ajax({
            type: "POST",
            url: "locations-ajax.php",
            data: {
                x: position.coords.latitude,
                y: position.coords.longitude
            },
            success: function (data) {
                $("#listarea").html(data);
            }
        });
    });
}

关于php - 使用 AJAX 将 lat 和 lng 变量发送到 PHP 以进行邻近度计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14545351/

相关文章:

MySQL 显示所有月份

javascript - 将 FormData 从 Trigger.io Forge 上传到 Amazon S3

php - 使用 PHP + MySQL Left Join 合并来自 2 个查询的结果

java - 使用 liquibase 插入空值

php 正则表达式最小和最大数字长度

mysql - 如何编写包含多个 LIKE 子句的查询?

javascript - 我如何推迟解析(又名动态加载)tinyMCE 所见即所得文本编辑器 javascript 文件?

javascript - 页面上的多个表单,Ajax 在错误的表单上显示错误

php - CREATE TABLE SQL 语句不会运行

php - PDO 无法捕获抛出的异常