web-dev-qa-db-fra.com

jQuery ajax handle 401 Non autorisé

J'appelle une page Web tierce en utilisant jQuery ajax. Selon leur page, ils m'ont envoyé le code d'état 200 si la connexion est réussie et 401 si la connexion échoue. Voici mon exemple de code jquery. Ce code fonctionne très bien sur IE mais ne fonctionne pas sur Chrome ou Firefox. Quel pourrait être le problème?

$.ajax({
  type: 'GET',
  url: hostURL + 'j_teo_security_check?callback=?',
  dataType: 'json',
  data: ({j_username : $("#inp_user_name").val(), j_password: $("#inp_user_pwd").val()}),
  statusCode: {
      401:function() { alert("401"); },
      404:function() { alert("404"); },
      200:function() { alert("200"); },
      201:function() { alert("201"); },
      202:function() { alert("202"); }
    },
    complete: function(httpObj, textStatus){
    alert(httpObj.status);
  },
  error: function(){
    alert("error");
  },
  async: false
});

J'ai essayé toutes les fonctions error, success, complete et statusCode. Aucun d'eux ne gère l'erreur 401.

23
Prasad Rajapaksha

Je pourrais le réparer comme ci-dessous.

$(document).ready(function(){
        $("#cmdLogin").click(function(){             
             var request = $.ajax({
                url : hostURL + 'j_teo_security_check',
                data: ({j_username : $("#inp_user_name").val(), j_password: $("#inp_user_pwd").val()}),
                dataType : "jsonp",
                timeout : 5000
            });

            request.success(function() {
                loginSuccess();
            });

            request.error(function(httpObj, textStatus) {       
                if(httpObj.status==200)
                    loginSuccess();
                else
                    loginFail();
            });
        });
    })

Ce que j'ai fait a été ajouté un délai d'attente car l'erreur 401 n'est jamais revenue. Puisqu'il va à la fonction d'erreur même avec le code d'état 200 et les erreurs d'analyse, je l'ai fait pour ignorer l'état 200 à l'intérieur de l'erreur.

10
Prasad Rajapaksha

Ok, il semble que vous utilisez jsonp et je pense que cela pourrait être une limitation de jsonp. Regarde.

http://forum.jquery.com/topic/jquery-ajax-with-datatype-jsonp-will-not-use-error-callback-if-request-fails

On dirait qu'il y a une solution sur le dernier message. J'espère que cela t'aides!

3
bmurmistro