2010-10-19 12 views
6

Jak uzyskać nieprzetworzoną odpowiedź JSON z żądania jQuery $.getJSON()?

Po prostu chcę wydrukować nieprzetworzoną odpowiedź w dialogu alert() w przeglądarce?

+0

Należy użyć czegoś podobnego Firebug zobaczyć surowego JSON. Jest to o wiele bardziej przydatne niż ostrzeganie. – JAL

+0

@alex tak wiem. Jest to jednak prekursor ukrytego pola tekstowego, więc niektórzy użytkownicy mogą je odkryć i skopiować/wkleić odpowiedź w wiadomości e-mail. Długa historia. – Kev

Odpowiedz

3

Jeśli używasz JSONP, jest to zasadniczo niemożliwe.

Jeśli wysyłasz normalne żądanie do swojej domeny, zamień getJSON na get.

+0

Nie używam JSONP. Wypróbowałem Twoją sugestię i po prostu wyświetlam komunikat "[Object Object]". – Kev

+2

@Kev: Spróbuj dodać 'dataType: 'text''. – SLaks

+0

Po ilości "farting about", to działa. Oznacza to dodatkowy krok, aby następnie przeanalizować ciąg znaków do obiektu, a następnie '$ .dump()' lub 'JSON.stringify() 'jest dodatkowym krokiem w drugą stronę. – Kev

0

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

wolę używać pełnych metody .ajax więc nie trzeba pamiętać różne podpisy abstrakcji.

Docs powiedzieć, jest to równoznaczne z getJSON:

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

gdzie można mieć:

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

Zdecydowanie zalecamy korzystanie z przeglądarki Firefox i Firebug console.log(); do tego rodzaju rzeczy. Alarmy doprowadzają cię do szału po pewnym czasie.

Edit

podstawie innych odpowiedzi, mogę być nieporozumienia Twoje pytanie! Zawsze możesz użyć Fiddlera, aby zobaczyć surową odpowiedź.

+0

To surowy ciąg jsonów, który natrafił na przewód, który chcę wydrukować. To było tak, że mogłem zrobić szybkie, hackowate narzędzie do debugowania, aby sprawdzić wartość tablicy. Ale dzięki wszystkim. – Kev

+0

Firebug to sposób, aby przejść. Wystarczy przejść do funkcji callback (dane) {console.log (dane);}, aby zobaczyć cały obiekt zwrócony. – ScottE

+0

'console.log()' nadal zrzuca dane tak, jakby to był obiekt, a nie to, czego szukam. Nie widzę surowego JSON (nawiasy klamrowe, nawiasy kwadratowe, nazwy pól, brodawki i inne). Skrzypek działa, ale chciałem go ostatecznie osadzić w "tajnym" polu tekstowym. – Kev

0

Skończyło się na użyciu funkcji JSON.stringify() w https://github.com/douglascrockford/JSON-js/blob/master/json2.js.

Nie jest idealny, ponieważ ładuje się inny plik javascript, ale służy on mojemu celowi.

+0

Pamiętaj, że to niekoniecznie zwróci rzeczywisty otrzymany JSON. (Formatowanie może być inne) – SLaks

+0

@slaks - tak, ale chwilowo służyło temu celowi. – Kev

13

Od wersji jQuery 1.5 obiekt jqXHR jest przekazywany jako trzeci argument metody wywołania zwrotnego. Obiekt jqXHR ma właściwość reponseText, która zawiera nieprzetworzony ciąg JSON.

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

Tak, jest to bardzo przydatne w przypadku błędów: '.fail (funkcja (jqxhr, tekstStatus, błąd) { console.error (" Odpowiedź była: "+ jqxhr.responseText); });'); –

0

Istnieje wiele różnych opcji, aby uzyskać rzeczywistą odpowiedź czy to będzie JSON, który był analizowany lub błąd generowany przez przeglądarkę/serwer, że „getJSON” metoda próbował analizować, ale bezskutecznie.

Uwaga: w metodzie ".always" parametry zmieniają się w zależności od awarii lub sukcesu.

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

Jeśli chcesz uzyskać więcej informacji na stronie:
http://api.jquery.com/jQuery.ajax/#jqXHR lub
http://api.jquery.com/category/deferred-object/

Powiązane problemy