我将 map 视口(viewport)边界的坐标传递给服务器,该服务器以 json 数组的形式返回数据库中该区域中的所有坐标。
当我不使用 ajax 并且发送硬编码数字而不是参数时,它工作正常:
<script type="text/javascript">
var coordinatesMap =
<?php
global $wpdb;
$sql = "SELECT user_id, lat, lng FROM coordinates WHERE lat>30 and lat<50 and lng>-80 and lng<20";
$rows = $wpdb->get_results($sql, OBJECT_K);
if (is_array($rows)) {
echo json_encode($rows);
} else {
echo '{}';
}
?>;
alert(coordinatesMap);
for (var id in coordinatesMap)
{
if (coordinatesMap.hasOwnProperty(id))
{
alert(id);
alert(coordinatesMap[id].lat);
alert(coordinatesMap[id].lng);
}
}
</script>
这里唯一奇怪的事情是 alert(coordinatesMap);
给出了这个警报 [object Object]
。但这不是问题。
其余警报正常:177、40.058、-74.405、178、40.714、-74.005。
但是在“现实生活”中我必须将参数传递给服务器,所以我像这样使用ajax:
ajax 调用:
$.ajax({
type: "POST",
url: "markers.php",
data: ({'southWestLat' : southWestLat , 'southWestLng' : southWestLng , 'northEastLat' : northEastLat , 'northEastLng' : northEastLng}),
success: function(coordinatesMap){
alert( coordinatesMap );
for (var id in coordinatesMap)
{
if (coordinatesMap.hasOwnProperty(id))
{
alert(id);
alert(coordinatesMap[id].lat);
alert(coordinatesMap[id].lng);
}
}
}
});
PHP 脚本:
<?php
global $wpdb;
$sql = "SELECT user_id, lat, lng FROM coordinates WHERE lat>".$_POST["southWestLat"]." and lat<".$_POST["northEastLat"]." and lng>".$_POST["southWestLng"]." and lng<".$_POST["northEastLng"];
$rows = $wpdb->get_results($sql, OBJECT_K);
if (is_array($rows)) {
echo json_encode($rows);
} else {
echo "failure";
}
?>
这次 alert(coordinatesMap);
给出了一个不错的数组 - {"177":{"user_id":"177","lat":"40.0583238","lng":"-74.4056612"},"178":{"user_id":"178","lat":"40.7143528","lng":"-74.0059731"}}
但以下警报(我实际上感兴趣的警报)给出了无效值并处于无限循环中:`0、未定义、未定义、1、未定义、未定义、2 等...
你能说一下这是怎么回事吗?
最佳答案
在 javascript 中,如果坐标映射是 json 编码的,那么您所需要的就是解析它 使用
var obj = Jquery.parseJSON(coordinatesMap);
alert(obj.user_id);
如果有也很好
AJAX 调用中的数据类型:“json”。
希望能解决您的问题
关于php - ajax 查询返回的数组看起来不错,但它的器官没有正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6178344/