我使用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>
答案 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,这是不理想的。