Creo que es una pregunta muy básica, pero he pasado horas buscando una respuesta sin suerte, tengo el siguiente objeto json (generado usando play! Framework)Cómo analizar un objeto json usando jquery
{
"preg.pregunta": [{
"message":"Debes escribir una pregunta",
"key":"preg.pregunta",
"variables":[]
}],
"preg":[{
"message": "validation.object",
"key":"preg",
"variables":[]
}]
}
Esta es mi pieza de código jQuery
$.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.
}
});
quiero conseguir todos dentro preg.pregunta
(message
y key
valores)
¿Alguna ayuda?
ACTUALIZADO: bueno, no tengo suficiente reputación para responderme a mí mismo, esto es lo que he encontrado hasta ahora.
Ok tal vez sería más que evidente o tengo que estudiar un poco más; Descubrí que jQuery no analiza correctamente una respuesta JSON si aparece junto con un error HTTP (400 en este caso).
alguien sabe por qué este comportamiento?
Acabo de probar este código en success
manejador y funciona perfectamente!
$.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
}
});
ACTUALIZADO 2.
después de buscar alrededor de 2 horas, he encontrado una solución sencilla:
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)
});
})
}
Explicación: cuando se utiliza controlador de errores, jQuery devuelve un objeto complejo que describe el error , responseText contiene los datos recuperados del servidor, por lo tanto, debe analizarlos mediante la función parseJSON.
Espero que esto ayude!
Hola! Lo he intentado antes sin éxito, "response ['preg.pregunta'] no está definido" –
¿Qué ves en la consola cuando intentas lo siguiente: 'console.log (response);'? –
Hola Rory, bueno mi respuesta es bastante simple; Estoy validando un campo usando validadores de marcos de reproducción. Si se encuentra un error (un campo vacío por ejemplo) play devuelve un objeto validation.errorsMap() que se representa como JSON para que pueda usarlo más adelante, esta respuesta regresa con un 'HTTP 400' ... así que es por eso que lo cojo con el controlador 'error'. –