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!

Sahas Katta
quelle
$ .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
});
einsamer Tag
quelle
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.

Nick Craver
quelle
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);
     } 
    });
Hiral
quelle
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
})
Mahbub
quelle