jQuery-wenn/dann/fail bei gleichzeitiger ajax-Anfragen: Die Anfrage fehlgeschlagen ist?
Sich ein Szenario vorstellen, wo wir etwas tun wollen, nachdem die gleichzeitige Anforderungen für die 'foo' und 'bar' erfolgreich abgeschlossen haben oder einen Fehler melden, wenn einer oder beide von Ihnen hilft:
$.when($.getJSON('foo'), $.getJSON('bar'))
.then(function(foo, bar) {
console.log( 'I fire if BOTH requests are successful!' );
})
.fail(function() {
console.log( 'I fire if one or more requests failed.' );
});
Wie kann ich ermitteln, ob 1) der Antrag für 'foo' ist fehlgeschlagen, oder 2) der Antrag für die 'bar' ist fehlgeschlagen, oder 3) wenn beides nicht?
- Haben Sie versucht, einfach nur tun, ein zu einer Zeit?
- Stellen Sie sich eine Anwendung, die Anfragen, die 'foo' und 'bar' gleichzeitig, aber beides braucht, um erfolgreich zurück, bevor wir Sie weiterverarbeiten.
- warum machen Sie nicht beide foo und bar true oder false zurück, abhängig von deren Erfolg oder Misserfolg, rufen Sie die beiden Funktionen und speichern Sie Ihre Erträge in separaten Variablen? auf diese Weise können Sie beide wahr sind, und wenn nicht, prüfen Sie, welche der beiden falsch war.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie einfach ein fail rufen jedes Versprechen, das zurückgegeben wird, von
$.getJSON
:Wenn du mehr brauchst fine-grained control) können Sie überlastung
$.getJSON
zurück weitere Informationen zur fail-Funktion-siehe jQuery-Dokumentation aufverschoben.rejectWith
Vom die Dokumentation zu jQuery.wenn
In anderen Worten, Sie sollen, halten die Verweise auf jede Anfrage, und prüfen Sie es selbst per Hand, wenn Sie Sie benötigen.
Die Schwierigkeit ist, dass wenn die Fehler-callback wird aufgerufen, eine beliebige Anzahl von latenten können noch ausstehenden, also an diesem Zustand, Sie haben weder gescheitert noch erfolgreich.
Wünsche ich der Dokumentation erklärt ein wenig besser als was genau übergeben wird und der fail-handler in diesem Fall. Ausgehend von den Quell-code, obwohl es scheint, dass die Argumente eingegangen, die durch die Fehler-Handler sind davon abhängig, welche Latente fehl erste:
Ich bin kein Experte auf jQuery-Interna, aber ich denke, das einfach können Sie jede Ihrer Latenten Aufruf der "master" Aufgeschoben ist
reject
Methode, mit was auch immer Argumente, die es normalerweise gehen zu seinen Handler. Nicht ideal, wenn Sie mich Fragen... aber dann könnte ich mich verlesen werden diese.Frage ich mich, ob Sie gemeint ist aber:
Könnten Sie nennen
.isResolved()
um zu überprüfen, ob eine Anforderung ist eigentlich abgeschlossen, aber das problem mit.when()
ist, dass es dann scheitern, sobald entweder Anfrage fehl, so kann man nicht zuverlässig sagen, ob der andere Anfrage könnte etwa sein, zu scheitern.Ich glaube die Antwort, die ich gerade gebucht zu einem ähnliche Frage löst (kein Wortspiel beabsichtigt) dieser Anforderung durch die Schaffung eines zusätzlichen
$.Deferred
für jede AJAX-Abfrage, die Ihnen ermöglicht, zu warten, bis Sie wissen, dass die tatsächlichen Ergebnisse beider AJAX-Aufrufe.