2010-10-19 27 views
6

¿Cómo obtengo la respuesta JSON sin formato de una solicitud jQuery $.getJSON()?

Solo quiero imprimir la respuesta bruta en un diálogo alert() en mi navegador?

+0

Debe utilizar algo así como Firebug para ver el JSON prima. Es mucho más útil que alertar algo. – JAL

+0

@alex sí, lo sé. Pero este es el precursor de un cuadro de texto oculto para que ciertos usuarios puedan mostrarlo y copiar/pegar la respuesta en un correo electrónico. Larga historia. – Kev

Respuesta

3

Si está utilizando JSONP, esto es fundamentalmente imposible.

Si está enviando una solicitud normal a su dominio, reemplace getJSON con get.

+0

No estoy usando JSONP. Intenté su sugerencia y acabo de mostrar '[Object Object]'. – Kev

+2

@Kev: prueba agregar 'dataType: 'text''. – SLaks

+0

Después de una cantidad de "pedos", eso funciona. Significa un paso adicional para luego analizar la cadena de un objeto, pero luego '$ .dump()' o 'JSON.stringify() 'es un paso extra en el otro sentido. – Kev

0

http://api.jquery.com/jQuery.getJSON/

Yo prefiero usar los métodos .ajax lleno, así que no tengo que recordar las diversas firmas de las abstracciones.

Los documentos dirá esto es equivalente a getJSON:

$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: callback 
}); 

donde se puede tener:

function callback(data) { 
    alert(data); 
} 

recomiendo encarecidamente que utilice Firefox y Firebug con console.log(); para este tipo de cosas Las alertas te vuelven loco después de un tiempo.

Editar

Sobre la base de las otras respuestas, puedo ser mal entendido su pregunta! Siempre puedes usar Fiddler para ver la respuesta sin formato.

+0

Es la cadena de json sin procesar que apareció en el cable que quiero imprimir. Era solo para que yo pudiera hacer una rápida y hacky depuración para verificar el valor de una matriz. Pero gracias de todos modos. – Kev

+0

Firebug es el camino a seguir en ese momento. Simplemente cambie a la devolución de llamada de la función (datos) {console.log (data);} para ver el objeto completo devuelto. – ScottE

+0

'console.log()' sigue volcando los datos como si fuera un objeto, no es lo que estoy buscando. No puedo ver el JSON en bruto (llaves, corchetes, nombres de campo, verrugas y todo). Fiddler funciona, pero quería incluirlo en un cuadro de texto 'secreto'. – Kev

0

Terminé usando la característica JSON.stringify() en https://github.com/douglascrockford/JSON-js/blob/master/json2.js.

No es ideal porque se está cargando otro archivo javascript, pero sirve para mi propósito.

+0

Tenga en cuenta que esto no devolverá necesariamente el JSON real que recibió. (El formato puede ser diferente) – SLaks

+0

@slaks - sí, pero sirvió momentáneamente a un propósito. – Kev

13

A partir de jQuery 1.5 el objeto jqXHR se pasa como tercer argumento del método de devolución de llamada. El objeto jqXHR tiene una propiedad de texto de respuesta que contiene la cadena JSON sin formato.

function callback(data, status, jqXHR) { 
    alert(jqXHR.responseText); 
    // or console.log(jqXHR.responseText); 
} 
+1

Sí, esto es muy útil cuando se trata de errores: '.fail (función (jqxhr, textStatus, error) { console.error (" Respuesta fue: "+ jqxhr.responseText); });' –

0

Hay una serie de diferentes opciones para conseguir la respuesta real ya sea el JSON que se analiza o el error generado por el navegador/servidor que el método 'getJSON' trató de analizar, pero fracasó.

Nota: con el método '. Siempre' los parámetros cambian en función de la falla o el éxito.

$.getJSON(getData.php, function(data,textStatus,jqXHR) { 
    console.log(jqXHR.responseText); 

//As of 1.5 we have these methods: 
}).always(
    function(jqXHR, textStatus, errorThrown) { //on failure 
     console.log(jqXHR.responseText); 
}).always(
    function(data, textStatus, jqXHR) { //on success 
     console.log(jqXHR.responseText); 
}).fail(
    function(jqXHR, textStatus, errorThrown) { 
     console.log(jqXHR.responseText); 

//As of 1.8 we have this method also: 
}).then(
    function(data, textStatus, jqXHR) { 
     console.log(jqXHR.responseText);}, 
    function(jqXHR, textStatus, errorThrown) { 
     console.log(jqXHR.responseText); 
}); 

Si desea más información, visite:
http://api.jquery.com/jQuery.ajax/#jqXHR o
http://api.jquery.com/category/deferred-object/

Cuestiones relacionadas