2010-10-19 10 views
6

Come ottengo la risposta JSON non elaborata da una richiesta jQuery $.getJSON()?

Voglio solo stampare la risposta non elaborata in un dialogo alert() nel mio browser?

+0

Si dovrebbe usare qualcosa come Firebug per vedere il JSON crudo. È molto più utile che avvisare qualcosa. – JAL

+0

@alex si lo so. Ma questo è il precursore di una casella di testo nascosta, quindi alcuni utenti possono visualizzarlo e copiare/incollare la risposta in un'email. Lunga storia. – Kev

risposta

3

Se si utilizza JSONP, questo è fondamentalmente impossibile.

Se si invia una richiesta normale al dominio, sostituire getJSON con get.

+0

Non sto usando JSONP. Ho provato il tuo suggerimento e ho appena visualizzato '[oggetto oggetto]'. – Kev

+2

@Kev: prova ad aggiungere 'dataType: 'text''. – SLaks

+0

Dopo una quantità di "peti", funziona. Significa un passo in più per poi analizzare la stringa in un oggetto, ma poi '$ .dump()' o 'JSON.stringify() 'è un ulteriore passaggio nell'altro modo. – Kev

0

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

Io preferisco usare i metodi .ajax pieni quindi non devo ricordare le varie firme dei astrazioni.

La documentazione dirvi questo è equivalente a getJSON:

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

dove si potrebbe avere:

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

vi consiglio vivamente di utilizzare Firefox e Firebug con console.log(); per questo genere di cose. Gli avvisi ti fanno impazzire dopo un po '.

Modifica

Sulla base delle altre risposte, mi può essere equivoco la tua domanda! Puoi sempre usare Fiddler per vedere la risposta non elaborata.

+0

È la stringa json raw che ha attraversato il filo che voglio stampare. Era solo così che potevo fare una veloce operazione di debug degli hacky per verificare il valore di un array. Ma grazie lo stesso. – Kev

+0

Firebug è la strada da percorrere allora. Basta cambiare la funzione callback (data) {console.log (data);} per vedere restituito l'intero oggetto. – ScottE

+0

'console.log()' esegue ancora il dump dei dati come se fosse un oggetto, non proprio quello che sto cercando. Non riesco a vedere il raw JSON (parentesi graffe, parentesi quadre, nomi dei campi, verruche e tutto). Fiddler funziona, ma alla fine ho voluto incorporarlo in una casella di testo 'segreta'. – Kev

0

Ho finito per utilizzare la funzionalità JSON.stringify() in https://github.com/douglascrockford/JSON-js/blob/master/json2.js.

Non ideale perché è un altro file javascript che viene caricato, ma serve al mio scopo.

+0

Nota che questo non restituirà necessariamente il JSON effettivo che hai ricevuto. (La formattazione potrebbe essere diversa) – SLaks

+0

@slaks - sì, ma ha servito momentaneamente uno scopo. – Kev

13

A partire da jQuery 1.5 l'oggetto jqXHR viene passato come terzo argomento del metodo di callback. L'oggetto jqXHR ha una proprietà reponseText che contiene la stringa JSON non elaborata.

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

Sì, questo è molto utile quando si tratta di errori: '.fail (funzione (jqxhr, textStatus, errore) { console.error (" Risposta è stata: "+ jqxhr.responseText); });' –

0

ci sono una serie di diverse opzioni per ottenere la risposta effettiva che si tratti della JSON che è stato analizzato o l'errore generato dal browser/server che il metodo 'getJSON' ha tentato di analizzare, ma non è riuscito.

Nota: con il metodo ".ways" i parametri cambiano in base al fallimento o al successo.

$.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); 
}); 

Se volete maggiori informazioni visitare:
http://api.jquery.com/jQuery.ajax/#jqXHR o
http://api.jquery.com/category/deferred-object/

Problemi correlati