web-dev-qa-db-fra.com

Analyse de jQuery AJAX réponse

J'utilise la fonction suivante pour envoyer un formulaire via 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);   
    },
});

Il poste bien mais je ne peux pas analyser la réponse, il se connecte à la console comme suit

{
    "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
    }
}

que je crois est la réponse que je cherche.

Cependant, lorsque j'essaie de faire alert(data.success); ou l'un des autres membres de l'objet de réponse, c'est undefined.

Tout conseil apprécié.

19
Barry Hamilton

appel

var parsed_data = JSON.parse(data);

devrait permettre d’accéder aux données comme vous le souhaitez.

console.log(parsed_data.success);

devrait maintenant montrer '1'

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

Imaginez que ceci soit votre réponse Json

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

Voici comment analyser la réponse et accéder aux valeurs

    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);
    }
});

Cela alertera le champ VisitId

4
RenatoCastanheira

vous devez analyser la chaîne JSON pour devenir objet

var dataObject = jQuery.parseJSON(data);

afin que vous puissiez l'appeler comme suit:

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

Puisque vous utilisez $.ajax, et non pas $.getJSON, votre type de retour est un texte brut. vous devez maintenant convertir data en objet JSON.

vous pouvez le faire en modifiant votre $.ajax en $.getJSON (qui est un raccourci pour $.ajax, uniquement préconfiguré pour récupérer JSON).

Ou vous pouvez analyser la chaîne data dans JSON après l'avoir reçue, comme suit:

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

Utilisez parseJSON. Regardez le doc

var obj = $.parseJSON(data);

Quelque chose comme ça:

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

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

    }
});
0
Davor Zubak