Jak radzić sobie z błędami w wywołaniu getJSON? Próbuję odwołać się do usługi skryptów między domenami za pomocą jsonp. Jak zarejestrować metodę błędu?
jquery
cross-domain
jsonp
getjson
Ajay
źródło
źródło
Odpowiedzi:
$.getJSON()
jest rodzajem abstrakcji zwykłego wywołania AJAX, w którym musisz powiedzieć, że chcesz odpowiedzi w formacie JSON.Błędy można obsługiwać na dwa sposoby: ogólnie (konfigurując wywołania AJAX przed ich faktycznym wywołaniem) lub konkretnie (za pomocą łańcucha metod).
„rodzajowy” mógłby wyglądać następująco:
I „specyficzny” sposób:
źródło
JSONP
ponieważ wydaje się, żegetJSON
w takim przypadku nie wywołujeerror()
funkcji. Mam ten sam problem. Myślę, że ma to związek z tym, jakJSONP
jest obsługiwane zupełnie inaczej niż normalneAJAX
połączeniajQuery
pomimogetJSON
obsługi obu.JSON
odbywa się za pomocąXMLHTTPRequest
obiektu, aleJSONP
odbywa się to poprzez dynamiczne dodawanie<script>
znacznika do stronyHEAD
.Ktoś dał Luciano te punkty :) Właśnie przetestowałem jego odpowiedź - miałem podobne pytanie - i działałem idealnie ...
Dodaję nawet 50 centów:
źródło
Oto mój dodatek.
Od http://www.learnjavascript.co.uk/jq/reference/ajax/getjson.html i oficjalnego źródła
„ Metody wywołania zwrotnego jqXHR.success (), jqXHR.error () i jqXHR.complete () wprowadzone w jQuery 1.5 są przestarzałe od jQuery 1.8. Aby przygotować kod do ich ewentualnego usunięcia, użyj jqXHR.done (), jqXHR zamiast tego .fail () i jqXHR.always (). "
Zrobiłem to i oto zaktualizowany fragment kodu Luciano:
Oraz z opisem błędu i pokazaniem wszystkich danych JSON w postaci ciągu:
Jeśli nie lubisz powiadomień, zamień je na
console.log
źródło
Wiem, że minęło trochę czasu, odkąd ktoś odpowiedział tutaj, a plakat prawdopodobnie już otrzymał odpowiedź albo stąd, albo gdzie indziej. Myślę jednak, że ten post pomoże każdemu, kto szuka sposobu śledzenia błędów i przekroczeń limitu czasu podczas wykonywania żądań getJSON. Dlatego poniżej mojej odpowiedzi na pytanie
Struktura getJSON jest następująca (znaleziona na http://api.jqueri.com ):
większość ludzi wdraża to za pomocą
tam, gdzie używają url var, aby udostępnić link do danych JSON, datatosend jako miejsce do dodania
"?callback=?"
i innych zmiennych, które należy wysłać, aby uzyskać prawidłowe dane JSON, oraz funkcję powodzenia jako funkcję przetwarzania danych .Możesz jednak dodać zmienne status i xhr do swojej funkcji sukcesu. Zmienna statusu zawiera jeden z następujących ciągów: „sukces”, „niezmodyfikowany”, „błąd”, „limit czasu” lub „parsererror”, a zmienna xhr zawiera zwrócony obiekt XMLHttpRequest ( znaleziony w w3schools )
W ten sposób można łatwo śledzić limity czasu i błędy bez konieczności implementowania niestandardowego modułu do śledzenia limitów czasu, który jest uruchamiany po wykonaniu żądania.
Mam nadzieję, że pomoże to komuś, kto wciąż szuka odpowiedzi na to pytanie.
źródło
Zostało to naprawione w jQuery 2.x; W jQuery 1.x nigdy nie otrzymasz wywołania zwrotnego błędu
źródło
Miałem do czynienia z tym samym problemem, ale zamiast tworzyć wywołania zwrotne dla nieudanego żądania, po prostu zwróciłem błąd z obiektem danych json.
Jeśli to możliwe, wydaje się to najłatwiejszym rozwiązaniem. Oto próbka użytego kodu Python. (Korzystanie z Flask, jsonify f Flask i SQLAlchemy)
Następnie możesz sprawdzić Javascript w ten sposób;
źródło
Dlaczego nie
??
Aby uzyskać szczegółowe informacje na temat zastosowanej
.fail()
metody (jQuery 1.5+), zobacz http://api.jquery.com/jQuery.ajax/#jqXHRPonieważ funkcja
jqXHR
jest zwracana przez funkcję, podobny jest łańcuchjest możliwe.
źródło
W niektórych przypadkach możesz napotkać problem z synchronizacją z tą metodą. Napisałem wywołanie zwrotne w
setTimeout
funkcji i zadziałało synchronicznie dobrze =)NA PRZYKŁAD:
źródło
To dość stary wątek, ale pojawia się w wyszukiwarce Google, więc pomyślałem, że dodam odpowiedź jQuery 3, używając obietnic. Ten fragment pokazuje również:
Fragment kodu to:
źródło