基于Javascript函数值,通过PHP检索数据库数据

时间:2015-12-20 11:05:59

标签: javascript php ajax

我使用GET获取此文件的地名。然后我将地名转换为纬度和经度。

我想根据纬度和经度显示数据库中的一些数据,但是我无法将经度和经度变量从JS发送到PHP。

我也试过Ajax,但这也没有用,因为PHP在脚本之前加载。如果我错了,请纠正我。

任何形式的帮助都将受到赞赏。

<?php
    $user_latitude
    $user_longitude
    $result=$con->query("SELECT *, ( 6371 * acos( cos( radians($user_latitude) ) * cos( radians( lat ) ) * cos( radians( lon ) - radians($user_longitude) ) + sin( radians($user_latitude) ) * sin( radians( lat ) ) ) ) AS distance FROM Location HAVING distance < 100 ORDER BY distance LIMIT 0 , 10");

    for($x=0;$x<$result->num_rows;$x++){
        $row=$result->fetch_assoc();
        echo "<div class='result-data'>";
        echo $row["name"];
        echo "</div>";
        }
    ?>
<script>
$(function() {  
    geocoder = new google.maps.Geocoder();
    alert($_GET('location'));
    var address = $_GET('location');
    address=address+',Delhi,India';
    alert(address);
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        latitude=results[0].geometry.location.lat();
        longituderesults[0].geometry.location.lng();
        alert("Latitude: "+results[0].geometry.location.lat()+latitude);
        alert("Longitude: "+results[0].geometry.location.lng()+longitude);
      } else {
        alert("Geocode was not successful for the following reason: " + status);
      }
    });
  });

  function $_GET(param) {
    var vars = {};
    window.location.href.replace( 
    /[?&]+([^=&]+)=?([^&]*)?/gi, // regexp
    function( m, key, value ) { // callback
        vars[key] = value !== undefined ? value : '';
    }
  );
  if (param) {
    return vars[param] ? vars[param] : null;    
  }
  return vars;
}   
</script>

2 个答案:

答案 0 :(得分:0)

$ _ GET是一个php函数,因此在JavaScript中调用它不会起作用。您需要使用以下内容:http://api.jquery.com/jquery.ajax/并在服务器上设置端点以处理ajax请求。

答案 1 :(得分:0)

必须使用AJAX才能达到你想要的结果。由于需要执行的操作顺序,我看不到另一种方法。

以下是一些示例代码,您还需要将代码拆分为两个文件。

file1.php(使用jQuery AJAX,希望没问题)

<?php
if(isset($_GET)){
    $location = $_GET['l'];
}
?>

<div id="test"></div>

<script>
    $(function() {

        geocoder = new google.maps.Geocoder();

        alert('<?=$location?>');
        var address = '<?=$location?>';
        address=address+',Delhi,India';
        alert(address);
        geocoder.geocode( { 'address': address}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {

                var latitude=results[0].geometry.location.lat();
                var longitude=results[0].geometry.location.lng();

                alert("Latitude: "+results[0].geometry.location.lat()+latitude);//Both of these would be the same?
                alert("Longitude: "+results[0].geometry.location.lng()+longitude);
                $.ajax (
                    {
                        type    :   "POST",
                        url     :   "file2.php",
                        data    :
                        {
                            longitude:longitude,
                            latitude:latitude
                        },
                        success :   function(result)
                        {
                            $('#test').html(result);
                        },
                        error: function (xhr, ajaxOptions, thrownError)
                        {
                            alert(xhr.status);
                            alert(thrownError);
                        }
                    });

            }
            else {
                alert("Geocode was not successful for the following reason: " + status);
            }
        });

    });
</script>

请注意,您缺少=经度变量声明。

file2.php(这是ajax将请求然后下拉数据的文件)

<?php
//connection to your DB here
$user_latitude = $_POST['latitude'];
$user_longitude = $_POST['longitude'];

$result=$con->query("SELECT *, ( 6371 * acos( cos( radians($user_latitude) ) * cos( radians( lat ) ) * cos( radians( lon ) - radians($user_longitude) ) + sin( radians($user_latitude) ) * sin( radians( lat ) ) ) ) AS distance FROM Location HAVING distance < 100 ORDER BY distance LIMIT 0 , 10");

for($x=0;$x<$result->num_rows;$x++){
    $row=$result->fetch_assoc();
    echo "<div class='result-data'>";
    echo $row["name"];
    echo "</div>";
}

这样,位置名称将从URL加载$ _GET(类似于mysite.com/file1.php?l=delhi)并传递给JS,AJAX调用然后发送到请求数据的php文件DB。最后,这将显示在id = test div。

这应该有效但是你应该注意$ _GET的一些安全问题。 http://www.ultramegasoft.com/blog/2009/08/5-basic-php-security-tips/还有关于SO的$ _GET的大量信息。如果没有紧缩,我不会在生产中使用上述代码。这个方法也将你的JS链接到PHP,这是不理想的。