2009-05-15 7 views
3

이것은 내 아약스 호출의 굿입니다. 진행 아약스 호출하고 페이지에 링크를 사용자가 클릭이있을 때Jquery 모호한 아약스 오류

function ajax(path, requestData, successCallBack, errorCallBack) { 
    return $.ajax({ 
     error: function(xhr, textStatus, errorThrown) 
      ç(xhr, textStatus, errorThrown); 
     }, 
     success: function(json){ 
      successCallBack(json); 
     } 
    }); 
} 

은 내 errorCallBack가 호출됩니다. 사용자가 멀리 탐색하면 ajax 호출이 종료됩니다. 서버에 오류가 발생하면 내 errorCallBack 콜백도 호출됩니다.

두 가지를 구별하는 방법이 있습니까?

감사합니다.

답변

-1

xhr 개체의 속성을 확인하십시오. 그것은 어딘가에 HTTP 응답 코드가 있어야합니다.

1

내가 작업 한 것과 동일한 문제가 발생했습니다. $ .ajax 요청이 취소되었습니다 (사용자가 탐색/중지 함). xhr.status == 0 대신 200/404/etc ... 사용자가 링크를 클릭하거나, 브라우저에서 URL을 변경, 멀리 페이지에서 하나 상쾌한로 이동할 때

jQuery를 오류 이벤트를 던졌습니다 :

+2

이렇게하면 사용자가 멀리 탐색하는 것과 완전히 연결할 수없는 서버를 구별하지 못합니다. 나는 그것이 효과 있다고 생각하지 않는다. –

1

여기 내가 gnarf 년대와 nickf의 대답을 구현하는 데 사용되는 기술이다. colbeerhey의 대답은 좋은 @

$.ajax({ 
    /* ajax options omitted */ 
    error: function (xmlHttpRequest, textStatus, errorThrown) { 
     if(xmlHttpRequest.readyState == 0 || xmlHttpRequest.status == 0) 
       return; // it's not really an error 
     else 
       // Do normal error handling 
}); 
3

,하지만 당신은 한 단계 더 갈 수 있습니다 : 당신은 XMLHttpRequest 객체를 아약스 호출에 대한 오류 처리기를 구현하고, 검사하여 의해 이러한 유형의 오류를 감지 할 수 있습니다. 서버가 실제로 도달 할 수 없는지 여전히 알 필요가 있습니다. 나는 그 질문에 here을 물었지만, 전체 답은

var running = true; 
$(window).bind('beforeunload', function() { running = false; }); 

$.ajax({ 
    /* ajax options omitted */ 
    error: function (xmlHttpRequest, textStatus, errorThrown) { 
     var serverNotReached = xmlHttpRequest.readyState == 0 || xmlHttpRequest.status == 0; 
     if(serverNotReached && !running) 
       return; // it's not really an error, user clicked away 
     else if (serverNotReached) 
       // The server is down! You didn't get any response at all. 
     else 
       // Do normal error handling 
}); 

정말 사실상의 표준이 아니라 onbeforeunload 마음 (IE FF는 웹킷 모든 그것을 처리)에 보관 그래서 당신은 더 애매한 신경 경우이 중단됩니다 브라우저.