Отображение переменной json через jquery - PullRequest
2 голосов
/ 18 июля 2009

Я хочу, чтобы отображалась переменная json-файла (Дата), но она не работает. Что я делаю не так?

<script type="text/javascript">
    $(document).ready(function()
   {
        $.getJSON("http://json-head.appspot.com/?url=http://www.trinum.com/ibox/chatel/images/photofull.jpg&callback=?", function(data)
         {
           $.each(data.headers, function(i,item)
           {
              if(i < 2)
              {
                 $("body").append("+item.Date+");
              }
           });

         });        
    });

</script>

Ответы [ 5 ]

4 голосов
/ 19 июля 2009

Фактическая проблема - ваша структура ответа JSON, headers - это только объект, и с помощью функции $. Каждой вы выполняете итерацию по элементам этого объекта ( Content-Length, Via и т.д ... ), если headers предназначен для хранения более одного объекта, вы должны использовать обозначение массива "[]" на нем:

{
    "status_code": 200, 
    "ok": true, 
    "headers": [{
        "Content-Length": "7068", 
        "Via": "HTTP\/1.1 GWA", 
        "X-Powered-By": "ASP.NET", 
        "Accept-Ranges": "bytes", 
        "X-Google-Cache-Control": "remote-fetch", 
        "Server": "Microsoft-IIS\/6.0", 
        "Last-Modified": "Tue, 06 Feb 2007 07:57:38 GMT", 
        "ETag": "\"8b5f5c78c449c71:2c6a\"", 
        "Cache-Control": "no-cache", 
        "Date": "Sun, 19 Jul 2009 05:51:42 GMT", 
        "Content-Type": "image\/jpeg"
    }]
};

При этом $. Каждый будет перебирать все объекты, определенные в массиве headers.

Обозначение массива начинается с [ ( левая скобка ), заканчивается ] ( правая скобка ), а значения разделяются , (* 1023) * запятая ):

JSON Array Notation

Для получения дополнительной информации о синтаксисе JSON и проверке структуры этот сайт .

1 голос
/ 18 июля 2009

Просто поищите в Google javascript + dump и вы найдете несколько эквивалентов php print_r для javaScript.

Это один пример (из http://www.openjs.com/scripts/others)

/dump_function_php_print_r.php )
/**
 * Function : dump()
 * Arguments: The data - array,hash(associative array),object
 *    The level - OPTIONAL
 * Returns  : The textual representation of the array.
 * This function was inspired by the print_r function of PHP.
 * This will accept some data as the argument and return a
 * text that will be a more readable version of the
 * array/hash/object that is given.
 * Docs: http://www.openjs.com/scripts/others/dump_function_php_print_r.php
 */
function dump(arr,level) {
    var dumped_text = "";
    if(!level) level = 0;

    //The padding given at the beginning of the line.
    var level_padding = "";
    for(var j=0;j<level+1;j++) level_padding += "    ";

    if(typeof(arr) == 'object') { //Array/Hashes/Objects 
        for(var item in arr) {
            var value = arr[item];

            if(typeof(value) == 'object') { //If it is an array,
                dumped_text += level_padding + "'" + item + "' ...\n";
                dumped_text += dump(value,level+1);
            } else {
                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
            }
        }
    } else { //Stings/Chars/Numbers etc.
        dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
    }
    return dumped_text;
}
0 голосов
/ 18 июля 2009

отправляется ли ваша сторона клиента как Дата? потому что иногда я обнаружил, что вместо отправки в виде строки, он отображается как javascript Date (это отметка времени)

, поэтому вам нужно конвертировать так:

var yourDate = new Date(item.Date);

полный код:

<script type="text/javascript">
    $(document).ready(function()
   {
        $.getJSON("http://json-head.appspot.com/?url=http://www.trinum.com/ibox/chatel/images/photofull.jpg&callback=?", function(data)
         {
           $.each(data.headers, function(i,item)
           {
              if(i < 2)
              {
                 $("body").append(new Date(item.Date));
              }
           });

         });        
    });

</script>
0 голосов
/ 18 июля 2009

$. GetJSON принимает 3 аргумента в порядке URL, данные, обратный вызов. Так что в этом случае вы должны сделать:

$(document).ready(function(){
 $.getJSON("http://json-head.appspot.com/?url=http://www.trinum.com/ibox/chatel/images/photofull.jpg&callback=?", null, function(data){
  $.each(data.headers, function(i,item){
   if(i < 2){
    $("body").append("+item.Date+");
   }
  });
});
});
0 голосов
/ 18 июля 2009

У вас должен быть синтаксический анализатор на клиенте, который понимает формат даты, дата не анализируется, и .getJSON () не будет ее анализировать.

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