2012-04-22 4 views
19

jQuery ajax를 사용하여 제 3 자 웹 페이지를 호출하고 있습니다. 그들의 페이지에 따르면 그들은 로그인 성공의 경우 상태 코드 200을, 로그인 실패의 경우 401을 보냈습니다. 다음은 jquery 코드 샘플입니다. 이 코드는 IE에서는 잘 작동하지만 Chrome이나 Firefox에서는 작동하지 않습니다. 무엇이 문제 일 수 있습니까?jQuery ajax handle 401 Unauthorized

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

나는 모든 기능 오류, 성공, 완료 및 statusCode를 시도했습니다. 그들 중 아무도 401 오류를 처리하지 못합니다.

+1

은 방화 광에서 요청/응답 OK입니까? – skafandri

+0

IE와 Chrome에서 보낸 데이터는 무엇입니까 ('console.log')? ID가'inp_user_name' 또는'inp_user_pwd' 인 요소가 여러 개 있지 않습니까? 'cache : false' 옵션을 추가하십시오. 또한'data : ([...])'줄에서 괄호를 제거 할 수 있습니다. 또한 HTML 코드를 사용합니까? 어떤 유형의 요소가 "inp_user_xxx"입니까? – pomeh

+0

아니요. 모든 것이 요청에 따라 잘 작동합니다. 올바른 암호를 전달하면 상태 코드 200에 문제가 없습니다. 그리고 내가 틀린 암호를 보낼 때 응답 코드 401을받습니다. 나는 그것이 401 일 때 그것을 포착하고 싶다. 그러나 어떤 기능도 그것을지지하지 않는다. 나는 모든 기능 오류, 성공, 완료 및 statusCode를 시도했다. 내 요구 사항은 401 오류를 잡는 것입니다. 멈추지 말아라. –

답변

10

다음과 같이 수정할 수 있습니다.

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

401 오류가 다시 발생하지 않았으므로 시간 초과가 추가되었습니다. 상태 코드 200 및 구문 분석 오류가있는 경우에도 오류 기능으로 넘어 가기 때문에 오류 내에서 상태 200을 무시하도록했습니다.

관련 문제