Как я могу разобрать Json с JQuery - PullRequest
1 голос
/ 27 октября 2010

Мне нужно проанализировать простой ответ json (из моего приложения rails):

[
    {
        "photo":
            {
                "updated_at":"2010-10-14T19:12:35Z",
                "photo_file_size":206422,
                "created_at":"2010-10-14T19:12:01Z"
            }
      },
      {
        "photo":
            {
                "updated_at":"2010-10-16T18:19:38Z",
                "photo_file_size":83593,
                "created_at":"2010-10-14T19:14:35Z"
            }
       }
]

Я использую:

$(document).ready(function()
{
    $.ajax({
     type: "GET",
     url: "http://myurl...",    
     dataType: "jsonp",
     success: function(data){
        console.log(data);          
        //...
          });

     }
    });
});

вывод консоли firebug показывает, что ответ в порядке!

Как я могу проанализировать каждый photo_file_size из всех фотоблоков, используя функцию (данные)?

любая помощь будет высоко оценена: -)

Ответы [ 4 ]

6 голосов
/ 27 октября 2010

jQuery автоматически проанализирует данные как JSON, потому что вы установили тип данных.В методе успеха вы можете использовать базовый Javascript, чтобы что-то делать с photo_file_size

$(document).ready(function(){
  $.ajax({
    type: "GET",
    url: "http://myurl...",    
    dataType: "json",
    success: function(data){
      for( var i=0; i<data.length; i++ ){
        alert( data[i].photo.photo_file_size );
      }
    }
  });
});

Однако, если вы используете JSONP, вам нужно подходить к нему совершенно по-другому.JSONP имеет функцию обратного вызова и будет обслуживаться в теге <script> (чтобы избежать той же политики происхождения, см. Вики)

<script>
    function callback( data ){
      for( var i=0; i<data.length; i++ ){
        alert( data[i].photo.photo_file_size );
      }
    }
</script>
<script src="yoururltojsonp.php?callback=callback"></script>

Также взгляните на решение jQuery

1 голос
/ 27 октября 2010
function(data) 
{
  for(var i=0; i<data.length; i++) 
    console.log(data[i].photo.photo_file_size);
}
1 голос
/ 27 октября 2010

Это не данные JSONP, это просто JSON. Тогда у вас будет доступ к данным, как если бы это была обычная переменная. В этом случае данные будут массивом.

Предполагается, что сервер совпадает с сервером, запрашивающим JSON.

Если вам нужны данные JSONP, они должны выглядеть примерно так:

$callback$([
    {
        "photo":
        {
            "updated_at":"2010-10-14T19:12:35Z",
            "photo_file_size":206422,
            "created_at":"2010-10-14T19:12:01Z"
        }
    },
    {
        "photo":
        {
            "updated_at":"2010-10-16T18:19:38Z",
            "photo_file_size":83593,
            "created_at":"2010-10-14T19:14:35Z"
        }
    }
]);

$ callback $ - это простая печать того, что было передано в переменную callback = GET. По сути, JSONP на самом деле просто вызывает функцию (обратный вызов). Он помещается в DOM как тег сценария, поэтому он обходит проблему между доменами. (Может быть, это слишком много информации:)

1 голос
/ 27 октября 2010

JSON-анализатор jQuery - $.parseJSON(). Итак, в вашей функции успеха:

var json = $.parseJSON(data);

или, если вы не используете тип ответа json:

var json = $.parseJSON(data.responseText);

и тебе надо идти.

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