问题描述
||
我正在将地图视口边界的坐标传递给服务器,该服务器以jsoned数组的形式返回该区域中db中的所有坐标。
当我不使用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,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,等等。
你能说发生什么吗?
解决方法
尝试将\“ dataType:json \”添加到您的Ajax请求中,例如
$.ajax({
type: \"POST\",url: \"markers.php\",dataType: \"json\",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);
}
}
}
});
, 在javascript中,如果coordinateMap是json编码的,那么您只需解析它
使用
var obj = Jquery.parseJSON(coordinatesMap);
alert(obj.user_id);
拥有它也会很好
您的AJAX调用中的dataType:\“ json \”。
我希望能解决您的问题
, 您可以告诉ѭ9期待JSON数据,宽度:dataType: \"json\"
在参数中。
$.ajax({
type: \"POST\",// ...
dataType: \"json\"
});