web-dev-qa-db-fra.com

jQuery $ .get ou $ .post pour rattraper une erreur de chargement de page (par exemple 404)

Comment attrapez-vous l'erreur de serveur ou la page 404 non trouvée lorsque vous utilisez $ .get ou $ .post?

Par exemple:

$.post("/myhandler", { value: 1 }, function(data) {
  alert(data);
});

Cela ne fera absolument rien s'il y a une erreur de serveur lors du chargement de "/ myhandler", ou si elle n'est pas trouvée.

Comment faites-vous vous informer s'il y a une erreur?

16
Aximili

utilisez error handler sur $.ajax()

$.ajax({
    url: "/myhandler", 
    data: {value: 1},
    type: 'post',
    error: function(XMLHttpRequest, textStatus, errorThrown){
        alert('status:' + XMLHttpRequest.status + ', status text: ' + XMLHttpRequest.statusText);
    },
    success: function(data){}
});

démo

23
Reigel

vous pourriez faire

$.post("/myhandler", { value: 1 }, function(data) {
  alert(data);
}).fail(function(){ 
  // Handle error here
});

échec sera appelé s'il y a une erreur

38

Les autres réponses sont bien, mais il existe des solutions alternatives, à savoir .ajaxSetup , .ajaxError et d'autres gestionnaires d'événements Ajax (consultez la page de la documentation sur ajaxSetup pour plus d'informations, à propos du reste).

Par exemple, avec .ajaxError, vous pouvez configurer un gestionnaire global de toutes vos erreurs ajax à partir de .post, .get, .getJSON et .ajax pour un ensemble d'éléments spécifique.

$(selector).ajaxError(function(event, xhr, ajaxOptions, errorThrown) {
    // handle ajax error here
});
5
mekwall

Utilisez plutôt $.ajax et utilisez le callback error.

http://api.jquery.com/jQuery.ajax/

2
coreyward

Essayez d’utiliser $.ajaxSetup() , stausCode option

$.ajaxSetup({
   statusCode : {
     // called on `$.get()` , `$.post()`, `$.ajax()`
     // when response status code is `404`
     404 : function (jqxhr, textStatus, errorThrown) {
             console.log(textStatus, errorThrown);
           }
     }
 });

// $.get("/path/to/url/");
// $.post("/path/to/url/");
// $.ajax({url:"/path/to/url/"})
1
guest271314