2013-07-05 3 views
4

Я TRIE получить JSON в мой JQuery Ajax successe: в Worke но я не доза .......Jquery Анализировать Json на АЯКС успеха

То, что я пытался сделать:

$("#addcatform").submit(function() { 
    var str = $(this).serialize(); 
    $.ajax({ 
    type: "POST", 
    url: "ajax.php", 
    data: str, 
    success: function(data){ 
     var json_x = data; 
     alert(json_x.firstName2); 
     $('#result').html(json_x.firstName2); 
     $('#result2').html(json_x.b); 
    } 
    }); 

    return false; 
    event.preventDefault(); 
}); // submit end 

РНР вторит это:

$arr = array ('firstName2'=>'hallo','b'=>2,'c'=>3,'d'=>4,'e'=>5); 
echo json_encode($arr); 

что случилось с этим? Спасибо за помощь!!!!

+0

Пожалуйста, обратите внимание, что 'event' не определено в вашем примере. Вы должны изменить первую строку на '$ (« # addcatform »). Submit (function (event) {' – Sumurai8

ответ

8

Вам нужно разобрать ваш JSON перед использованием,

Вы можете добавить DATATYPE в запросе - JQuery будет анализировать ваш ответ JSON

$.ajax({ 
    type: "POST", 
    url: "ajax.php", 
    dataType: 'json', 

Или, вы можете разобрать его самостоятельно -

success: function(data){ 
    var json_x = $.parseJSON(data); 
+0

Спасибо Mohammad. Если вы собираетесь разобрать его самостоятельно, не забудьте обработать ошибку, вызванную, если действие синтаксического анализа завершится с ошибкой. – sataniccrow

+0

Большое спасибо за все остальные ответы на stackoverflow. –

0

data - это строка в вашем примере. Использование jQuery.getJSON().Редактировать: Поскольку вы не можете выполнить POST-запрос с помощью getJSON (dûh), используйте .ajax с соответствующим типом данных. Это будет извлекать данные через ajax и анализирует результирующую строку, как если бы это JSON. Даже с getJSON результатом будет массив (или массив вроде объекта, не уверен). У этого нет методов или переменных, к которым вы можете получить доступ с помощью точечной нотации. Вам необходимо получить к нему доступ через data['a'].

$.ajax({ 
    dataType: "json", 
    type: "POST", 
    url: "ajax.php", 
    data: str, 
    success: function(data){ 
    var json_x = data; 
    alert(json_x['firstName2']); 
    $('#result').html(json_x['firstName2']); 
    $('#result2').html(json_x['b']); 
    } 
}); 
+0

Правильное объяснение, но 'getJSON' не принимает объект в качестве первого аргумента. Посмотрите документацию еще раз. –

+0

Вы правы, и поскольку он нужен почтовый запрос ... ну ... ему нужно будет использовать .ajax с подходящим типом данных.Я считаю, что это все равно будет анализировать возвращенные данные, как если бы это JSON. – Sumurai8

+0

На данный момент используется dataType: "json" , я не получаю никакого результата без dataType: «json», я получаю предупреждение с неопределенным ... ????????? – user1606423

2

Вы можете попробовать это:

var data=$.ajax({ 
     type: "POST", 
     url: 'ajax.php', 
     data: { 
      data:str 
     }, 
     async: false, 
     dataType: 'json' 
    }); 
    var msg= data.responseText; 
    msg=jQuery.parseJSON(msg); 

Я обычно посылаю либо массив или 'ошибка' сообщение от моей страницы PHP

if(msg=='error') 
{ 
/* do something */ 
} 
else 
// use the data 

Это работает с JQuery 1,6-> 1,8

EDIT: Поскольку jquery 1.8 async устарел. я рекомендовал бы этот формат:

$.ajax({ 
     type: "POST", 
     url: 'ajax.php', 
     data: { 
      data:str 
     }, 
     dataType: 'json', 
    ).done(function(data) { 
     // do something with the data 
    }) 
    .fail(function() { 
    // give appropriate message 
    }) 

http://api.jquery.com/jquery.ajax/

Смежные вопросы