php - ajax 查询返回的数组看起来不错,但它的器官没有正确显示

标签 php ajax jquery

我将 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/

相关文章:

php - 如何强制 Doctrine 更新数组类型字段?

php - 在 PHP 中将用户 ID 转换为名称(单独的表)

php - 包含来自单独文件夹的文件

javascript - 使用带循环的 AJAX 更新表

javascript - 如果绑定(bind)对象被 ajax 刷新,.submit 不起作用

jquery - BlockUI Messagebox 高度不是我想要的

javascript - 如何在成功回调函数中获取$.ajax()请求参数?

javascript - 在浏览器中,Chrome 方法 POST 与 GET 类似

javascript - fullPage.js 在 IE 和 Firefox 中的选择框元素顶部滚动

javascript - 通过数字数组禁用日期 jquery datepicker