2010-10-31 13 views
49

Dzięki StackOverflow udało mi się uzyskać następujący kod działający idealnie, ale mam pytanie uzupełniające.jQuery .get funkcja odpowiedzi błędu?

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

Powyższy kod umożliwił mojej witrynie pobranie drugiej strony artykułów za pomocą przycisku Załaduj więcej w WordPress. Jednak gdy na stronie zabraknie stron/wyników, mam mały problem. Przycisk ładowania więcej pozostaje na swoim miejscu. Będzie nadal próbował pobrać dane, nawet jeśli nie ma żadnych stron.

Jak mogę zmodyfikować to polecenie, aby móc wyświetlić odpowiedź wizualną, jeśli żądanie .get zakończy się niepowodzeniem lub na przykład (404) nie znaleziono strony?

Jeśli ktoś mógłby mi pomóc z prostym przykładem nawet alert("woops!");, byłoby świetnie!

Dzięki!

+0

$ .ajaxSetup funkcja działa jak uroku, jego najlepszym rozwiązaniem dla $ get - http://stackoverflow.com/questions/2175756/how-to-handle-error-in-get – BetaCoder

Odpowiedz

133

Nie można ustawić funkcji obsługi błędów. trzeba będzie użyć funkcji niskiego poziomu $.ajax Zamiast:

$.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 
    } 
}); 

Edycja marzec '10

pamiętać, że z nowym jqXHR obiektu w jQuery 1.5, można ustawić obsługi błędów po wywołaniu $.get:

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

nie robić musisz to zrobić, są inne alternatywy z '$ .ajaxSetup()' i globalnym wydarzeniem 'ajaxError'. –

+0

Rzeczywiście istnieją. – lonesomeday

+0

to rozwiązanie jest bardziej intuicyjne –

30

Jeśli chcesz błąd rodzajowy można skonfigurować cały $.ajax() (co $.get() korzysta pod spodem) żąda jQuery sprawia wyświetlać błąd za pomocą $.ajaxSetup(), na przykład:

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

wystarczy uruchomić ten jeden raz przed podjęciem AJAX połączenia (żadnych zmian do swojego aktualnego kodu, po prostu trzymać się tego wcześniej gdzieś) . To ustawia opcję error na domyślną na obsługę/funkcję powyżej, jeśli wykonałeś pełne wywołanie $.ajax() i określiłeś obsługę error, a następnie to, co miałbyś, zastąpiłoby powyższe.

+0

Nie działa, pojawia się ten alert: Wystąpił błąd AJAX: błąd Błąd: –

11

Możesz uzyskać błąd szczegółów za pomocą właściwości responseText.

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

Działa również dla Jquery 3.1.x – keesp

Powiązane problemy