Wie können Sie mit Fehlern in einem getJSON-Aufruf umgehen? Ich versuche mit jsonp auf einen domänenübergreifenden Skriptdienst zu verweisen. Wie registriere ich eine Fehlermethode?
jquery
cross-domain
jsonp
getjson
Ajay
quelle
quelle
Antworten:
$.getJSON()
ist eine Art Abstraktion eines regulären AJAX-Aufrufs, bei dem Sie angeben müssen, dass Sie eine JSON-codierte Antwort wünschen.Sie können Fehler auf zwei Arten behandeln: generisch (indem Sie Ihre AJAX-Aufrufe konfigurieren, bevor Sie sie tatsächlich aufrufen) oder spezifisch (mit Methodenkette).
"generisch" wäre so etwas wie:
Und der "spezifische" Weg:
quelle
JSONP
esgetJSON
in einem solchen Fall dieerror()
Funktion nicht aufruft . Ich habe das gleiche Problem. Ich denke, esJSONP
hängt damit zusammen, wie völlig anders behandelt wird als bei normalenAJAX
Anrufen,jQuery
obwohlgetJSON
beide behandelt werden.JSON
wird mit einemXMLHTTPRequest
Objekt ausgeführt,JSONP
erfolgt jedoch durch dynamisches Hinzufügen eines<script>
Tags zu den SeitenHEAD
.Jemand gibt Luciano diese Punkte :) Ich habe gerade seine Antwort getestet - hatte eine ähnliche Frage - und perfekt funktioniert ...
Ich addiere sogar meine 50 Cent:
quelle
Hier ist meine Ergänzung.
Von http://www.learnjavascript.co.uk/jq/reference/ajax/getjson.html und der offiziellen Quelle
" Die in jQuery 1.5 eingeführten Rückrufmethoden jqXHR.success (), jqXHR.error () und jqXHR.complete () sind ab jQuery 1.8 veraltet. Verwenden Sie jqXHR.done (), jqXHR, um Ihren Code für das eventuelle Entfernen vorzubereiten .fail () und stattdessen jqXHR.always (). "
Ich habe das gemacht und hier ist Lucianos aktualisiertes Code-Snippet:
Und mit Fehlerbeschreibung und Anzeige aller JSON-Daten als Zeichenfolge:
Wenn Sie keine Warnungen mögen, ersetzen Sie sie durch
console.log
quelle
Ich weiß, es ist schon eine Weile her, dass jemand hier geantwortet hat und das Poster wahrscheinlich bereits seine Antwort entweder von hier oder von irgendwo anders erhalten hat. Ich denke jedoch, dass dieser Beitrag jedem helfen wird, der nach einer Möglichkeit sucht, Fehler und Zeitüberschreitungen zu verfolgen, während er getJSON-Anfragen ausführt. Deshalb unten meine Antwort auf die Frage
Die getJSON-Struktur lautet wie folgt (auf http://api.jqueri.com ):
Die meisten Leute implementieren das mit
Wenn sie die URL var verwenden, um einen Link zu den JSON-Daten bereitzustellen, das Datenende als Ort zum Hinzufügen der
"?callback=?"
und anderer Variablen , die gesendet werden müssen, um die richtigen JSON-Daten zurückzugeben, und die Erfolgsfunktion als Funktion zum Verarbeiten der Daten .Sie können jedoch die Status- und xhr-Variablen zu Ihrer Erfolgsfunktion hinzufügen. Die Statusvariable enthält eine der folgenden Zeichenfolgen: "Erfolg", "Nicht geändert", "Fehler", "Zeitüberschreitung" oder "Parsererror", und die Variable xhr enthält das zurückgegebene XMLHttpRequest-Objekt ( auf w3schools gefunden ).
Auf diese Weise ist es einfach, Zeitüberschreitungen und Fehler zu verfolgen, ohne einen benutzerdefinierten Zeitüberschreitungs-Tracker implementieren zu müssen, der nach Abschluss einer Anforderung gestartet wird.
Ich hoffe, dies hilft jemandem, der noch nach einer Antwort auf diese Frage sucht.
quelle
Es ist in jQuery 2.x behoben; In jQuery 1.x erhalten Sie niemals einen Fehlerrückruf
quelle
Ich war mit demselben Problem konfrontiert, aber anstatt Rückrufe für eine fehlgeschlagene Anforderung zu erstellen, habe ich einfach einen Fehler mit dem json-Datenobjekt zurückgegeben.
Wenn möglich, scheint dies die einfachste Lösung zu sein. Hier ist ein Beispiel des von mir verwendeten Python-Codes. (Mit Flask jsonify f Flask und SQLAlchemy)
Dann können Sie Javascript wie folgt überprüfen.
quelle
Warum nicht
??
Einzelheiten zur verwendeten
.fail()
Methode (jQuery 1.5+) finden Sie unter http://api.jquery.com/jQuery.ajax/#jqXHRDa das
jqXHR
von der Funktion zurückgegeben wird, mag eine Verkettung wieist möglich.
quelle
In einigen Fällen kann es zu Problemen bei der Synchronisierung mit dieser Methode kommen. Ich habe den Rückrufaufruf in eine
setTimeout
Funktion geschrieben und er hat synchron gut funktioniert =)Z.B:
quelle