Невозможно прочитать объект json из запроса jquery ajax () - PullRequest
1 голос
/ 03 апреля 2011

Я уже несколько раз просматривал SO и не могу найти ответ, который мне подходит, во всяком случае, вот JS:

jQuery.ajax({
    url:'scripts/form.php?'+
        'name='+$('#name').val()+
        '&comment='+$('#comment').val(),
    type:'POST',
    dataType:'json',
    complete:function(success) { 
        alert(success.responseText);
        alert(success.name);
    }
});

Вот (обобщенный) скрипт:

header('Content-type: application/json');
$name    = $_GET['name'];
$comment = $_GET['comment'];

echo json_encode(array('name'=>$name, 'comment'=>$comment));

Вот вывод из блоков предупреждений:

  1. {"name": "test name", "comment": "test comment"}
  2. undefined

Я пробовал кучу разных вещей, но я в растерянности.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011

Вы должны использовать событие success вместо события complete - в противном случае ответ не будет проанализирован как JSON автоматически.

jQuery.ajax({
    url:'scripts/form.php?'+
        'name='+$('#name').val()+
        '&comment='+$('#comment').val(),
    type:'POST',
    dataType:'json',
    success:function(data) { 
        alert(data.name);
    }
});

Если вы хотите использовать complete обработчик, вам нужно будет проанализировать возвращаемое значение с помощью $.parseJSON, прежде чем вы сможете использовать его как объект:

var response = $.parseJSON(success.responseText);
1 голос
/ 03 апреля 2011

Используйте $.getJSON(), поскольку вам не нужна полная гибкость $.ajax().

$.getJSON('scripts/form.php',
{
    name: $('#name').val(),
    comment: $('#comment').val()
}, function (data)
{
    alert(data.name);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...