Понимание того, как анализировать JSON с помощью jQuery - PullRequest
0 голосов
/ 29 июня 2011

Я ценю, что есть много сообщений на эту тему, и много в Google, но я изо всех сил пытаюсь понять, как разбить поток JSON и получить доступ к данным.

{ "type": "FeatureCollection",
"features": [
{ "type": "Feature",
"geometry": {"type": "Point", "coordinates": [-122.4211908, 37.7564513]},
"properties": {
"id": "2950648771574984913",
"accuracyInMeters": 80,
"timeStamp": 1309323032,
"reverseGeocode": "San Francisco, CA, USA",
"photoUrl": "https://www.google.com/latitude/apps/badge/api?type=photo&photo=uuRL2jABAAA.9fWeRzNpS-tdX0cqHxxclg.7zdBNW-Rb634EIkOgyO8sw",
"photoWidth": 96,
"photoHeight": 96,
"placardUrl": "https://www.google.com/latitude/apps/badge/api?type=photo_placard&photo=uuRL2jABAAA.9fWeRzNpS-tdX0cqHxxclg.7zdBNW-Rb634EIkOgyO8sw&moving=true&stale=true&lod=1&format=png",
"placardWidth": 56,
"placardHeight": 59
}
}
]
}

Я пытаюсь получить доступ ко всем данным в нем, например:

Две координаты.Обратный геокод.и т.д.

Я создал такую ​​функцию:

    function findTristan(){
            var FindUrl = "/proxy.php";

            var tristanData = $.getJSON(FindUrl,function(json){});

            // this is the part I have failed to get right.
            alert(tristanData.coordinates);

    }

Ответы [ 3 ]

4 голосов
/ 29 июня 2011

Из-за асинхронной природы AJAX вам нужно манипулировать данными только внутри обратного вызова, так как это единственное место, где эти данные доступны. Функция $.getJSON немедленно возвращается и не возвращает результат запроса AJAX. Поэтому следует использовать анонимный обратный вызов, который вы оставили пустым в своем коде:

function findTristan() {
    var FindUrl = '/proxy.php';
    $.getJSON(FindUrl, function(json) {
        var lat = json.features[0].geometry.coordinates[0];
        var lon = json.features[0].geometry.coordinates[1];
        alert('lat: ' + lat + ', lon: ' + lon);
    });
}
2 голосов
/ 29 июня 2011

Вам нужно использовать функцию $.parseJSON для преобразования JSON в массив js: http://api.jquery.com/jQuery.parseJSON/

С уважением,

Макс

0 голосов
/ 29 июня 2011

Эти два значения должны использоваться в полной функции getJSON.

json.features[0].geometry.coordinates[0]
json.features[0].geometry.coordinates[1]

Вы не должны просто alert после выполнения запроса Ajax.Зачем?Потому что Ajax-вызов по своей природе асинхронный.Это просто означает, что запрос отправлен, и ваш код немедленно продолжает выполнение, не дожидаясь ответа на запрос.Вот почему ваш alert выполняется (без каких-либо результатов), прежде чем вы получите результаты обратно с сервера.

А также getJSON не будет возвращать данные так, как вы это сделали.Он вернет данные в полной функции, где вам придется использовать их самостоятельно.

function findTristan(){
    var FindUrl = "/proxy.php";

    var tristanCoords = {};

    $.getJSON(FindUrl, function(data){

        tristanCoords = data.features[0].geometry.coordinates;
        alert("x: " + tristanCoords[0] + ", y: " + tristanCoords[1]);

    });
}

Советы

Всякий раз, когда вам нужно работать с JavaScript, объектами и т. Д., Используйте Firebug (плагин Firefox) и отладка вашего кода.Вы сможете развернуть свой объект и точно увидеть его структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...