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!
Ciao! L'ho provato prima senza successo, "la risposta ['preg.pregunta'] non è definita" –
Cosa vedi nella console quando provi quanto segue: 'console.log (risposta);'? –
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'. –