Подтвердить что ты не робот

Синтаксический анализ jquery ajax response

Я использую следующую функцию для отправки формы через jquery ajax

$('form#add_systemgoal .error').remove();
var formdata = $('form#add_systemgoal').serialize();
$.ajaxSetup({async: false});  
$.ajax({     
    type: "POST",
    url: '/admin/systemgoalssystemgoalupdate?format=html',
    data: formdata,
    success: function (data) {
        console.log(data);   
    },
});

Он отлично пишет, но я не могу разобрать ответ, он записывается на консоль следующим образом

{"success":1,"inserted":{"goal_id":"67","goalsoptions_id":"0","user_id":"0","value":"dsfdsaf","created":"2013-06-05 09:57:38","modified":null,"due":"2013-06-17 00:00:00","status":"active","actions_total":"0","actions_title":"sfdgsfdgdf","action_type":"input","points_per_action":"1","expires":"2013-06-11 00:00:00","success":1}}

который, я считаю, является ответом, который я ищу, однако, когда я пытаюсь сделать alert (data.success); или любой из других членов объекта ответа - undefined.

Любые советы, оцененные

4b9b3361

Ответ 1

вызова

var parsed_data = JSON.parse(data);

должно привести к возможности доступа к данным, как вы хотите.

console.log(parsed_data.success);

должен теперь показать '1'

Ответ 2

 $.ajax({     
     type: "POST",
     url: '/admin/systemgoalssystemgoalupdate?format=html',
     data: formdata,
     success: function (data) {
         console.log(data);
     },
     dataType: "json"
 });

Ответ 3

Представьте, что это ваш ответ Json

{"Visit":{"VisitId":8,"Description":"visit8"}}

Вот как вы анализируете ответ и получаете доступ к значениям

    Ext.Ajax.request({
    headers: {
        'Content-Type': 'application/json'
    },
    url: 'api/fullvisit/getfullvisit/' + visitId,
    method: 'GET',
    dataType: 'json',
    success: function (response, request) {
        obj = JSON.parse(response.responseText);
        alert(obj.Visit.VisitId);
    }
});

Это будет предупреждать поле VisitId

Ответ 4

вы должны проанализировать строку JSON, чтобы стать объектом

var dataObject = jQuery.parseJSON(data);

чтобы вы могли называть его так:

success: function (data) {
    var dataObject = jQuery.parseJSON(data);
    if (dataObject.success == 1) {
       var insertedGoalId = dataObject.inserted.goal_id;
       ...
       ...
    }
}

Ответ 5

Поскольку вы используете $.ajax, а не $.getJSON, ваш тип возврата - это обычный текст. вам нужно преобразовать data в объект JSON.

вы можете сделать это, изменив $.ajax на $.getJSON (это сокращенное выражение для $.ajax, только предварительно настроенное для извлечения json).

Или вы можете проанализировать строку data в JSON после ее получения, например:

    success: function (data) {
         var obj = $.parseJSON(data);
         console.log(obj);
    },

Ответ 6

Используйте parseJSON. Посмотрите doc

var obj = $.parseJSON(data);

Что-то вроде этого:

$.ajax({     
    type: "POST",
    url: '/admin/systemgoalssystemgoalupdate?format=html',
    data: formdata,
    success: function (data) {

        console.log($.parseJSON(data)); //will log Object

    }
});