我有一个脚本获取用户的当前位置,通过 Ajax 请求将其发送到一个 php 文件,该请求使用数据库检查附近的坐标并返回一个 xml 格式的标记,然后将其填充到谷歌地图中。我的问题是我还需要根据该 ajax 请求获取一些表格数据,这些数据不会进入谷歌地图插件。它将出现在地图的顶部,就像实际地图上标记的相关数据一样。问题是我不知道如何创建 xml 表。
我真正想要做的是让我的 php 脚本生成一些 html 格式的表,然后通过我用于获取 xml 标记的相同 ajax 请求将这些表附加到我的 html 文件中。
PHP解析文件 -
<?php
include("config.php");
// Get parameters from URL
$center_lat = $_GET["lat"];
$center_lng = $_GET["lng"];
$radius = $_GET["radius"];
// Start XML file, create parent node
$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node);
// Search the rows in the markers table
$query = sprintf("SELECT address, name, lat, lng, ( 3959 * acos( cos( radians('".$center_lat."') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('".$center_lng."') ) + sin( radians('".$center_lat."') ) * sin( radians( lat ) ) ) ) AS distance FROM venues HAVING distance < '".$radius."' ORDER BY distance LIMIT 0 , 20",
mysqli_real_escape_string($mysqli, $center_lat),
mysqli_real_escape_string($mysqli, $center_lng),
mysqli_real_escape_string($mysqli, $center_lat),
mysqli_real_escape_string($mysqli, $radius));
$result = mysqli_query($mysqli, $query);
$result = mysqli_query($mysqli, $query);
if (!$result) {
die("Invalid query: " . mysqli_error($mysqli));
}
// Iterate through the rows, adding XML nodes for each
while ($row = @mysqli_fetch_assoc($result)){
$node = $dom->createElement("marker");
$newnode = $parnode->appendChild($node);
$newnode->setAttribute("name", $row['name']);
$newnode->setAttribute("address", $row['address']);
$newnode->setAttribute("lat", $row['lat']);
$newnode->setAttribute("lng", $row['lng']);
$newnode->setAttribute("distance", $row['distance']);
}
echo $dom->saveXML();
?>
还有我的 Ajax 请求。
$(document).ready(function(){
var clientPosition ;
$("#map_canvas").gmap().live("init", function(evt, map) {
$("#map_canvas").gmap("getCurrentPosition", function(position, status) {
if ( status === "OK" ) {
var lat = position.coords.latitude;
var lng = position.coords.longitude;
var currentPositionMarker = "<marker name=\'Your Position\' lat="+lat+" lng="+lng+"/>";
var clientPosition = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
$("#map_canvas").gmap("addMarker", {"position": clientPosition, "bounds": \'true\'});
$.ajax({
type:"GET",
url: "someurl.php",
dataType: "xml",
data:{
lat:lat,
lng:lng,
radius:250
},
success: function(data) {
var markers = (data).getElementsByTagName("marker");
$(currentPositionMarker).appendTo(markers);
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < markers.length; i++) {
var name = markers[i].getAttribute("name");
var address = markers[i].getAttribute("address");
var type = markers[i].getAttribute("type");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var html = "<b>" + name + "</b> <br/>" + address;
bounds.extend(point);
displayMarker(name,point);
map.fitBounds(bounds);
};
}
});
function displayMarker(title, point) {
infowindow = new google.maps.InfoWindow;
var marker = new google.maps.Marker({
map: map,
title: title,
position: point
});
google.maps.event.addListener(marker, "click", function() {
infowindow.setContent(title);
infowindow.open(map, marker);
});
}
}
});
});
});
我知道这应该很简单,我查看了 PHP 文档并找到了一些相关的东西,但是当我实现它时,例如 $dom->loadHTML(); ajax 脚本停止工作,甚至不填充新的相关标记。
提前致谢!