jQuery .get Fehlerantwortfunktion?


74

Dank StackOverflow konnte ich den folgenden Code perfekt zum Laufen bringen, aber ich habe eine Folgefrage.

$.get('http://example.com/page/2/', function(data){ 
  $(data).find('#reviews .card').appendTo('#reviews');
});

Mit diesem Code oben konnte meine Website eine zweite Seite mit Artikeln mit der Schaltfläche Mehr laden in WordPress abrufen. Wenn der Site jedoch die Seiten / Ergebnisse ausgehen, stößt ich auf ein kleines Problem. Die Schaltfläche "Mehr laden" bleibt an Ort und Stelle. Es wird weiterhin versucht, Daten abzurufen, auch wenn keine Seiten mehr vorhanden sind.

Wie kann ich diesen Befehl so anpassen, dass ich eine visuelle Antwort anzeigen kann, wenn die .getAnforderung fehlschlägt oder beispielsweise eine (404) Seite nicht gefunden wird?

Wenn mir jemand mit einem einfachen Beispiel helfen könnte alert("woops!");, wäre das großartig!

Vielen Dank!


$ .ajaxSetup Funktion Funktioniert wie Charme, es ist die beste Option für $ get - stackoverflow.com/questions/2175756/how-to-handle-error-in-get
BetaCoder

Antworten:


182

$.getbietet Ihnen nicht die Möglichkeit, einen Fehlerbehandler festzulegen. Sie müssen $.ajaxstattdessen die Low-Level- Funktion verwenden:

$.ajax({
    url: 'http://example.com/page/2/',
    type: 'GET',
    success: function(data){ 
        $(data).find('#reviews .card').appendTo('#reviews');
    },
    error: function(data) {
        alert('woops!'); //or whatever
    }
});

Bearbeiten März '10

Beachten Sie, dass Sie mit dem neuen jqXHRObjekt in jQuery 1.5 nach dem Aufruf einen Fehlerhandler festlegen können $.get:

$.get('http://example.com/page/2/', function(data){ 
    $(data).find('#reviews .card').appendTo('#reviews');
}).fail(function() {
    alert('woops'); // or whatever
});

Sie müssen dies nicht tun, es gibt andere Alternativen mit $.ajaxSetup()und das ajaxErrorglobale Ereignis.
Nick Craver

Diese Lösung ist intuitiver

Hat fail irgendwelche Details darüber, warum es fehlgeschlagen ist?
jjxtra

34

Wenn Sie einen generischen Fehler wünschen, können Sie alle $.ajax()( $.get()darunter verwendeten) Anforderungen einrichten, die jQuery macht, um einen Fehler anzuzeigen $.ajaxSetup(), zum Beispiel:

$.ajaxSetup({
  error: function(xhr, status, error) {
    alert("An AJAX error occured: " + status + "\nError: " + error);
  }
});

Führen Sie dies einfach einmal aus, bevor Sie AJAX-Aufrufe tätigen (keine Änderungen an Ihrem aktuellen Code, kleben Sie dies einfach vorher irgendwo hin). Dadurch wird die errorOption standardmäßig auf den obigen Handler / die obige Funktion gesetzt. Wenn Sie einen vollständigen $.ajax()Aufruf getätigt und den errorHandler angegeben haben, wird das oben Gesagte überschrieben.


Funktioniert nicht, ich erhalte diese Warnung: Ein AJAX-Fehler ist aufgetreten: Fehler Fehler:
Josh Ribakoff

Verwenden Sie console.log anstelle von alert (): console.log("An AJAX error occured: " + status + "\nError: " + error);
Gael

13

Sie können Detailfehler erhalten, indem Sie die responseText-Eigenschaft verwenden.

$.ajaxSetup({
error: function(xhr, status, error) {
alert("An AJAX error occured: " + status + "\nError: " + error + "\nError detail: " + xhr.responseText);
     } 
    });

1

Sie können den .fail()Rückruf zur Fehlerantwort verketten.

$.get('http://example.com/page/2/', function(data){ 
   $(data).find('#reviews .card').appendTo('#reviews');
})
.fail(function() {
  //Error logic
})
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.