2012-05-26 19 views
6

Penso che sia una domanda molto semplice, ma ho passato ore a cercare una risposta senza fortuna, ho il seguente oggetto json (generato usando play! Framework)Come analizzare un oggetto json usando jquery

{ 
    "preg.pregunta": [{ 
     "message":"Debes escribir una pregunta", 
     "key":"preg.pregunta", 
     "variables":[] 
    }], 
    "preg":[{ 
     "message": "validation.object", 
     "key":"preg", 
     "variables":[] 
    }] 
} 

Questo è il mio pezzo jquery di codice

$.ajax({ 
    type: $target.attr('method'), 
    data: dataString, 
    url:$target.attr('action'), 
    dataType: "json", 
    beforeSend: function() { 
     //some stuff 
    }, 
    success:function(response){ 
     //some stuff 
    }, 
    error: function(response){ 
     //I want to use the json response here. 
    } 
}); 

voglio ottenere tutto dentro preg.pregunta (message e key valori)

Qualsiasi aiuto?

AGGIORNATO: beh non ho abbastanza reputazione per rispondere a me stesso, questo è quello che ho trovato finora.

Ok forse sarebbe più che ovvio o devo studiare un po 'di più; Ho scoperto che jQuery non analizza correttamente una risposta JSON se è accompagnata da un errore HTTP (400 in questo caso).

qualcuno sa perché questo comportamento?

Ho appena testato questo codice nel gestore success e funziona perfettamente!

$.ajax({ 
    type: $target.attr('method'), 
    data: dataString, 
    url:$target.attr('action'), 
    dataType: "json", 
    beforeSend: function() { 
    }, 
    success:function(response){ 
    //It is working perfectly! 
    $.each(response,function(object){ //first loop of the object 
     $.each(response[object],function(values){ //looping inside arrays 
     console.log(response[object][values].key) //getting value "key" 
     console.log(response[object][values].message) //getting value "message" 
     }); 
    }) 
    }, 
    error: function(response){ 
    //nothing happens here 
    } 
}); 

AGGIORNATO 2.

dopo aver cercato di circa 2 ore, ho trovato una soluzione semplice:

error: function(response){ 
//Note the jQuery.parseJSON function 
var response = jQuery.parseJSON(response.responseText); 
    $.each(response,function(object){ 
    $.each(response[object],function(values){ 
     console.log(response[object][values].key) 
     console.log(response[object][values].message) 
    }); 
    }) 
} 

Spiegazione: quando si usa gestore degli errori, jQuery restituisce un oggetto complesso che descrive l'errore , responseText contiene i dati recuperati dal server, quindi, è necessario analizzarlo utilizzando la funzione parseJSON.

Spero che questo aiuti!

risposta

2

Prova questo:

error: function(response) { 
    var pregunta = response["preg.pregunta"][0].message; 
    var key = response["preg.pregunta"][0].key; 
}, 

Se non ci fossero più valori all'interno dell'array preg.pregunta, si avrebbe bisogno di loop e sostituire il [0] con la variabile iterazione.

Inoltre, non capisco perché si desidera solo accedere alla risposta solo nel gestore error?

Infine, il codice per accedere a JSON è javascript nativo. Questo perché quando si riceve la risposta è stato convertito in un oggetto POJS, non è richiesto jQuery.

+0

Ciao! L'ho provato prima senza successo, "la risposta ['preg.pregunta'] non è definita" –

+0

Cosa vedi nella console quando provi quanto segue: 'console.log (risposta);'? –

+0

Ciao Rory, beh, la mia risposta è piuttosto semplice; Sto convalidando un campo usando i validatori di playframework, Se qualche errore viene trovato (un campo vuoto per esempio) play restituisce un oggetto validation.errorsMap() che è reso come JSON così posso usarlo in seguito, questa risposta ritorna con un 'HTTP 400' ... ecco perché lo prendo con l'handler 'error'. –

Problemi correlati