2013-06-05 13 views
17

ich die folgende Funktion verwenden, um ein Formular über jquery ajaxParsing jquery ajax Antwort

$('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); 
    }, 
}); 

Es bucht fein zu schreiben, aber ich kann die respons nicht analysieren, meldet sie zu trösten als

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

folgt was ich glaube, ist die Antwort, die ich suche, aber wenn ich versuche, Alert (data.success) zu machen; oder eines der anderen Mitglieder des Antwortobjekts ist es nicht definiert.

Jede Beratung schätzen

+2

'datatype aufmerksam gemacht:‚json''. Hast du '? Format = html' Parameter absichtlich gesetzt? Was heißt das? – zerkms

+1

Wenn Ihre AJAX-URL einen Inhaltsheader zurückgibt, der sich auf JSON bezieht, müssen Sie nicht einmal $ .parseJSON (Ihre Daten) eingeben, da jQuery dies standardmäßig automatisch tun würde. Ich mache das, und in jeder Antwort habe ich auch einen benutzerdefinierten Statuscode. Auf diese Weise können Sie leicht überprüfen, ob das passiert ist, was Sie erwartet haben. –

Antwort

13

var parsed_data = JSON.parse(data); 

Aufruf in der Fähigkeit, auf die Daten zuzugreifen führen sollte, wie Sie wollen.

console.log(parsed_data.success); 

sollte jetzt '1'

+1

Parsen Sie Json nicht, nachdem es empfangen wurde.Geben Sie in Ihrer ursprünglichen Anfrage "dataType: json" an und Sie erhalten json, keinen Text. –

0

Verwendung parseJSON. Schauen Sie sich die doc

var obj = $.parseJSON(data); 

Etwas wie folgt aus:

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

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

    } 
}); 
+0

Es ist sinnvoll, die Ursachen des Problems zu beheben, nicht seine Konsequenzen – zerkms

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

Da Sie $.ajax verwenden und nicht $.getJSON, Ihre Rückgabetyp ist Klartext. Sie müssen nun data in ein JSON-Objekt konvertieren.

können Sie dies tun, indem Sie Ihre $.ajax zu $.getJSON (das ist eine Kurzschrift für $.ajax, nur vorkonfiguriert, json holen) zu tun.

Oder Sie können die data Zeichenfolge in JSON analysieren, nachdem Sie es erhalten, etwa so:

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

Sie JSON-String parsen muss werden Objekt

var dataObject = jQuery.parseJSON(data); 

so können Sie es gerne nennen:

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

Stellen Sie sich vor, dass dies Ihre Json Antwort

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

Dies ist, wie Sie die Antwort analysieren und die Werte zugreifen

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

Dies wird die VisitId Feld