2012-05-26 29 views
6

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!

Respuesta

2

Prueba esto:

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

Si hubo múltiples valores dentro de la matriz preg.pregunta, que tendría que reemplazar el bucle y [0] con la variable de iteración.

Además, no entiendo muy bien por qué usted sólo desea acceder al Reponse sólo en el controlador de error?

Por último, el código para acceder a la JSON es javascript nativo. Esto se debe a que cuando recibes la respuesta, se convierte en un objeto POJS, no se requiere jQuery.

+0

Hola! Lo he intentado antes sin éxito, "response ['preg.pregunta'] no está definido" –

+0

¿Qué ves en la consola cuando intentas lo siguiente: 'console.log (response);'? –

+0

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'. –

Cuestiones relacionadas