2012-04-22 28 views
19

Llamo a una página web de terceros usando jQuery ajax. De acuerdo con su página, me enviaron el código de estado 200 si el inicio de sesión fue exitoso y 401 si el inicio de sesión no fue exitoso. Aquí está mi muestra del código jquery. Este código funciona bien en IE pero no funciona en Chrome o Firefox. ¿Cual podría ser el problema?jQuery ajax handle 401 No autorizado

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

Intenté todas las funciones error, success, complete, y statusCode. Ninguno de ellos maneja el error 401.

+1

¿la solicitud/respuesta está bien en firebug? – skafandri

+0

¿Cuáles son los datos enviados en IE y Chrome ('console.log' ellos)? ¿No tienes múltiples elementos con ID 'inp_user_name' o' inp_user_pwd'? Intenta agregar una opción 'cache: false'. Además, puede eliminar los paréntesis en la línea 'data: ([...])'. Además, ¿tiene el código HTML utilizado? ¿Qué tipo de elementos son esos "inp_user_xxx"? – pomeh

+0

No. Todo funciona bien con solicitud. No hay problema con el código de estado 200 cuando paso la contraseña correcta. Y obtiene el código de respuesta 401 cuando envío una contraseña incorrecta como debería ser. Quiero atraparlo cuando es 401. Pero ninguna de las funciones admite eso. Intenté todas las funciones error, success, complete y statusCode. Mi requisito es detectar el error 401. No para detenerlo. –

Respuesta

10

Lo podría arreglar como abajo.

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

Lo que hice se ha añadido tiempo de espera desde 401 error nunca regresó. Como va a la función de error incluso con el código de estado 200 y los errores de análisis, hice que se ignore el estado 200 dentro del error.

Cuestiones relacionadas