143 votes

Fonction d'erreur ajax de jQuery

J'ai un appel ajax qui transmet des données à une page qui renvoie ensuite une valeur.

J'ai récupéré l'appel réussi à partir de la page mais je l'ai codé de telle sorte qu'il soulève une erreur dans l'asp. Comment puis-je récupérer cette erreur à partir de Jquery ?

Par exemple :

cache: false,
url: "addInterview_Code.asp",
type: "POST",
datatype: "text",
data: strData,
success: function (html) {
    alert('successful : ' + html);
    $("#result").html("Successful");
},
error: function (error) {
    **alert('error; ' + eval(error));**
}

C'est l'erreur que je ne comprends pas. Dans la fonction, quel paramètre dois-je mettre, pour pouvoir ensuite utiliser le message d'erreur que j'ai reçu ? soulevé dans le serveur.

0 votes

Il y a une erreur de frappe : c'est dataType pas datatype .

0 votes

7 votes

@alej27 : la formulation est un peu bizarre, mais il n'est pas dit que vous ne pouvez pas les utiliser tous les deux, il est dit qu'une requête ne pourra pas appeler success et error (parce qu'ils sont mutuellement exclusifs).

250voto

palaѕн Points 23333

Les paramètres requis dans une requête Ajax error fonction sont jqXHR, exception et vous pouvez l'utiliser comme ci-dessous :

$.ajax({
    url: 'some_unknown_page.html',
    success: function (response) {
        $('#post').html(response.responseText);
    },
    error: function (jqXHR, exception) {
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    },
});

DEMO FIDDLE


Paramètres

jqXHR :

Il s'agit en fait d'un objet d'erreur qui ressemble à ceci

Ajax error jqXHR object

Vous pouvez également le visualiser dans la console de votre propre navigateur, en utilisant console.log à l'intérieur de la error comme une fonction :

error: function (jqXHR, exception) {
    console.log(jqXHR);
    // Your error handling logic here..
}

Nous utilisons le status de cet objet pour obtenir le code d'erreur, par exemple si nous obtenons status = 404 cela signifie que la page demandée n'a pas pu être trouvée. Elle n'existe pas du tout. Sur la base de ce code d'état, nous pouvons rediriger les utilisateurs vers la page de connexion ou tout ce que notre logique commerciale exige.

exception :

Il s'agit d'une variable de type chaîne qui indique le type d'exception. Donc, si nous obtenons l'erreur 404, exception le texte serait simplement "erreur". De même, nous pourrions obtenir 'timeout', 'abort' comme autres textes d'exception.


Avis de dépréciation : Le site jqXHR.success() , jqXHR.error() y jqXHR.complete() sont obsolètes depuis la version 1.8 de jQuery. Pour préparer votre code pour leur suppression éventuelle, utilisez jqXHR.done() , jqXHR.fail() , et jqXHR.always() à la place.

Donc, si vous utilisez jQuery 1.8 ou supérieur nous devrons mettre à jour la logique des fonctions de succès et d'erreur comme:-

// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax("some_unknown_page.html")
    .done(function (response) {
        // success logic here
        $('#post').html(response.responseText);
    })
    .fail(function (jqXHR, exception) {
        // Our error logic here
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    })
    .always(function () {
        alert("complete");
    });

J'espère que cela vous aidera !

104voto

czerasz Points 2135

Essayez ça :

error: function(jqXHR, textStatus, errorThrown) {
  console.log(textStatus, errorThrown);
}

Si vous voulez informer votre frontend d'une erreur de validation, essayez de retourner du json :

dataType: 'json',
success: function(data, textStatus, jqXHR) {
   console.log(data.error);
}

Votre asp script devrait retourner :

{"error": true}

1 votes

A quoi servent textSttaus et errorThrown ? Pouvez-vous expliquer

4voto

Rich C Points 588

Voici comment retirer l'erreur asp.

              cache: false,
              url: "addInterview_Code.asp",
              type: "POST",
              datatype: "text",
              data: strData,
              success: function (html) {
                  alert('successful : ' + html);
                  $("#result").html("Successful");
              },
              error: function (jqXHR, textStatus, errorThrown) {
                  if (jqXHR.status == 500) {
                      alert('Internal error: ' + jqXHR.responseText);
                  } else {
                      alert('Unexpected error.');
                  }
              }

2voto

Praveen Prasad Points 13137
error(jqXHR, textStatus, errorThrown)

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

9 votes

Veuillez fournir des explications, pas seulement un morceau de code et un lien vers la documentation.

12 votes

Merci pour presque rien.

0 votes

Par exemple, vous auriez pu dire "OP utilise une fonction error(error) mais jquery appelle une fonction error(jqXHR, textStatus, errorThrown). Remarquez les 2 paramètres manquants dans le snippet de OP".

2voto

sT0n3 Points 125
          cache: false,
          url: "addInterview_Code.asp",
          type: "POST",
          datatype: "text",
          data: strData,
          success: function (html) {
              alert('successful : ' + html);
              $("#result").html("Successful");
          },
          error: function(data, errorThrown)
          {
              alert('request failed :'+errorThrown);
          }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X