【发布时间】:2018-02-19 19:58:52
【问题描述】:
我正在使用 google maps api,我正在从 data.php 中提取标记数据 -
<?php
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
<markers>
<?php
$sql = "SELECT * FROM locations";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$id = $row['id'];
$lat = $row['lat'];
$lng = $row['lng'];
$name= $row['name'];
$address = $row['address'];
echo "<marker id='".$id."' name='<a href='site.php'>'".$name."'</a>' address='".$address."' lat='".$lat."' lng='".$lng."' type='X'/>";
}
}
?>
</markers>
在 main.php 文件中,我从 data.php 加载地图和标记 -
downloadUrl('data.php', function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName('marker');
Array.prototype.forEach.call(markers, function(markerElem) {
var id = markerElem.getAttribute('id');
var name = markerElem.getAttribute('name');
var address = markerElem.getAttribute('address');
var type = markerElem.getAttribute('type');
var point = new google.maps.LatLng(
parseFloat(markerElem.getAttribute('lat')),
parseFloat(markerElem.getAttribute('lng')));
var infowincontent = document.createElement('div');
var strong = document.createElement('strong');
strong.textContent = name
infowincontent.appendChild(strong);
infowincontent.appendChild(document.createElement('br'));
var text = document.createElement('text');
text.textContent = address
infowincontent.appendChild(text);
var icon = customLabel[type] || {};
var marker = new google.maps.Marker({
map: map,
position: point,
label: icon.label
});
marker.addListener('click', function() {
infoWindow.setContent(infowincontent);
infoWindow.open(map, marker);
});
});
});
}
当我添加锚标记时,它不再加载标记我无法读取 null 的属性“documentElement”,我该怎么做才能在此处传递锚标记?
【问题讨论】:
-
我强烈建议您使用
DOMDocument来生成 XML,而不是使用字符串手动生成 - 或者取消 XML 并使用 json,因为它更轻且更容易处理客户端。我认为问题在于在字符串中使用单引号并且缺少转义。当然,在您需要编写的代码中使用 DOMDocument 会更加冗长,但是当简单地滥用引号导致上述代码无效时,它应该足够健壮以生成有效的 XML。 -
我可以告诉你的一件事是你的回声线是错误的。您回显的
name属性无效。您不能以单引号开始属性,然后在该属性中嵌入单引号而不转义内部单引号。
标签: javascript php xml google-maps