2012-04-22 17 views
19

Ho chiamato la pagina Web di terzi utilizzando jQuery ajax. In base alla loro pagina mi hanno inviato il codice di stato 200 se l'accesso è riuscito e 401 se il login non è riuscito. Ecco il mio esempio di codice jquery. Questo codice funziona bene su IE ma non funziona su Chrome o Firefox. Quale potrebbe essere il problema?jQuery ajax handle 401 Non autorizzato

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

Ho provato tutte le funzioni error, success, complete e statusCode. Nessuno di loro gestisce l'errore 401.

+1

la richiesta/risposta ok su firebug? – skafandri

+0

Quali sono i dati inviati su IE e Chrome ('console.log' li)? Non hai più elementi con ID 'inp_user_name' o' inp_user_pwd'? Prova ad aggiungere un'opzione 'cache: false'. Inoltre, è possibile rimuovere la parentesi sulla riga 'data: ([...])'. Inoltre, hai usato il codice HTML? Che tipo di elementi sono quelli "inp_user_xxx"? – pomeh

+0

No. Tutto funziona bene con la richiesta. Non c'è alcun problema con il codice di stato 200 quando passo la password corretta. E ottiene il codice di risposta 401 quando invio password errata come dovrebbe essere. Voglio prenderlo quando è il 401. Ma nessuna delle funzioni lo supporta. Ho provato tutte le funzioni error, success, complete e statusCode. Il mio requisito è catturare l'errore 401. Non per fermarlo. –

risposta

10

Posso ripararlo come muggito.

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

Quello che ho fatto è stato aggiunto il timeout poiché l'errore 401 non è mai tornato. Dal momento che va in errore anche con il codice di stato 200 e gli errori di analisi ho fatto in modo che ignori lo stato 200 all'interno dell'errore.

Problemi correlati