Возвращенный массив из запроса ajax выглядит нормально, но его органы не отображаются должным образом - PullRequest
1 голос
/ 30 мая 2011

Я передаю координаты границ области просмотра карты на сервер, который возвращает все координаты в БД, которые находятся в этой области, в виде массива jsoned.
Когда я не использую 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, undefined, не определено, 1, не определено, не определено, 2 и т. д ...
Можете ли вы сказать, что происходит?

Ответы [ 3 ]

3 голосов
/ 30 мая 2011

в javascript, если координатМап кодируется в формате json, тогда все, что вам нужно, это проанализировать его используя

 var obj = Jquery.parseJSON(coordinatesMap);

alert(obj.user_id); 

Также будет хорошо иметь

dataType: "json" в вашем вызове AJAX.

Я надеюсь, что это решит вашу проблему

1 голос
/ 30 мая 2011

попробуйте добавить «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);
            }
        }                               
    }
});
0 голосов
/ 30 мая 2011

Вы можете указать $.ajax ожидать данные JSON, ширина: dataType: "json" в параметрах.

$.ajax({
    type: "POST",
    // ...
    dataType: "json"
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...