вызов данных Json возвращает неопределенное "

Когда я вызываю объект json из файла php, он возвращает значение undefined. Я вижу, что все данные пишутся alert(data), но когда я пишу alert(data.books), они возвращаются неопределенными.

$JSON = '

{
  "books": {
 "book1": "firstbook",
 "book2": "secondbook"
  }
  }
';

и я вызываю это с помощью jquery

jQuery('#login').live('submit',function(event) {


$.ajax({
    url: 'lib/login.php',
    type: 'POST',
    dataType: 'json',
    data: $('#login').serialize(),
  success: function(data ) {

alert(' ' +data.books);

  if(data.books.book1){  
alert("OK"); 
}else
{
alert("error");   
}
}

 });

   return false;


});

ИЗМЕНИТЬ Вот как он возвращает предупреждение (данные)

    {

  "books": {

  "book1": "firstbook",

  "book2": "secondbook"

}

}

person Ercan    schedule 06.09.2010    source источник
comment
Вы имеете в виду data.books.book1?   -  person Pekka    schedule 06.09.2010
comment
вы предупреждаете data.success, а не data.   -  person aularon    schedule 06.09.2010
comment
data.success не определяется в соответствии с вашим ответом в формате JSON.   -  person Shamim Hafiz    schedule 06.09.2010


Ответы (2)


Если вы используете jQuery 1.4+, возвращаемый вами JSON недействителен, ему нужен набор кавычек вокруг первой записи books, например:

{
  "books": {
    "book1": "firstbook",
    "book2": "secondbook"
  }
}

Более ранние версии более снисходительны к этому, но как только вы исправите это, alert(data.books) должно привести к объектному предупреждению. Для вашего if() вы должны использовать data.books.book1, чтобы получить запись в JSON, как сейчас.

person Nick Craver    schedule 06.09.2010
comment
Я изменил его, как вы грустите с книгами, но он также говорит, что он не определен. Также data.books.book1 возвращает неопределенный - person Ercan; 06.09.2010
comment
@Meko - Если вы сделаете console.log(data), что вы увидите в консоли? Похоже, ваш ответ не отформатирован точно так, как в вопросе. - person Nick Craver; 06.09.2010
comment
@Meko - Вы получаете именно эту строку, когда предупреждаете? - person Nick Craver; 06.09.2010
comment
@Meko - Можете ли вы дать ссылку на пример страницы? Как будто dataType: 'json' вообще нет, поскольку он видит его как строку. Без заголовков, говорящих, что это JSON или dataType, это будет обычная строка... похоже, это то, что происходит. - person Nick Craver; 06.09.2010
comment
Я импортировал страницу index.html, где моя форма, ‹script type=text/javascript src=ajax.googleapis.com/ajax/libs/jquery/1.4.1/› для jquery. Должен ли я использовать для Json тоже? - person Ercan; 06.09.2010
comment
@Meko - я имел в виду URL-адрес страницы, демонстрирующей указанную выше проблему :) На странице JSON не должно быть ничего, кроме возвращаемого JSON. - person Nick Craver; 06.09.2010
comment
сайт находится на моем локальном комп. не в интернете. - person Ercan; 06.09.2010
comment
@Meko - Как сейчас выглядит ваш результат? - person Nick Craver; 06.09.2010
comment
если я пишу предупреждение (данные), он показывает [object Object], если я пишу предупреждение (data.book1), он показывает первую книгу - person Ercan; 06.09.2010

Я изменил файл .php, например

$arr = array ( "book1" => "firstbook" ,"book2" => "secondbook" );

теперь он показывает, когда я пишу предупреждение (data.book1) из fisrtbook. Для проверки, работает ли (data.book1).

person Ercan    schedule 06.09.2010