web-dev-qa-db-fra.com

le rappel après échec de jQuery n'affiche pas la réponse pour le code 400

J'ai une demande de publication jQuery suivante:

$.post("ajax.php", data).done(
    function(response){
        // do something when response is ok
     }
   ).fail(
    function(response){
          $("#error").html(response);
     }
 );

Dans mon fichier ajax.php quand quelque chose ne va pas, je retourne le code de réponse HTTP 400 avec un message:

header("HTTP/1.0 400 Error");
echo "Some error message";
exit();

Lorsque je vérifie la réponse à un appel défectueux dans mon navigateur, je peux voir le code d'état Status Code:400 Bad Request et le texte de la réponse que j'ai transmis dans un message d'erreur. Mais le rappel .fail de jQuery n'affiche pas ma response

Comment puis-je accéder au texte de la réponse échec/erreur? 

MODIFIER

J'ai testé mon code et le rappel .fail est déclenché. Je ne parviens tout simplement pas à obtenir le message de réponse.

9
Gacek

J'utilise toujours 500 pour un code d'erreur ajax et il est généralement ramassé par. Échec pour moi. L'API JQ pour .post contient une longue liste de liens imbriqués décrivant comment ils gèrent l'objet JqXHR et comment il interagit avec JQ dans son ensemble. 

Étant donné que vous ne déclenchez pas .fail avec votre statut, vous pourriez demander à votre succès de vérifier votre code de statut spécifique dans la fonction .success ou .done, comme cela.

//post stuff
.success(function(response){  
   if(response.status == 400){
      //error stuff
   }
});

L'avantage d'effectuer vos propres vérifications dans .done ou .success est que vous pouvez définir des comportements astucieux pour différents statuts que vous souhaitez renvoyer de votre serveur. Il existe littéralement des dizaines de façons différentes de gérer les retours ajax et de définir les comportements de rappel.

** Voici une autre SO question qui contient d'autres résolutions.

Gestion des erreurs jQuery AJAX (codes d'état HTTP)

** La syntaxe ici est légèrement différente car cette question portait sur la méthode .ajax au lieu de .post, mais les idées et les résolutions proposées devraient toujours fonctionner.

0
Erik