2010-06-16 7 views
5

서버를 중단시키고 Ajax 요청을하면 firebug는 요청을 한 후 몇 초가 지나면 요청을 중단하고 내 success 처리기가 호출되는 것을 보여줍니다.

성공 핸들러가 호출되는 이유는 무엇입니까? 오류 핸들러가 아니어야합니까? 그리고 실제로 성공하지 못했음을 어떻게 신뢰성있게 감지 할 수 있습니까?

CODE :

  $.ajax({ 
       url: url, 
       type: "POST", 
       data: data, 
       dataType: "json", 
       success:function(data, statusText, xhr){ 
        //gets called on success, or even when server is down. 
       }, 
       error: function(){ 
        //called if server returns error, but not if it doesn't respond 
       } 
      }); 

UPDATE : 내 개발 서버를 끄지 때이 문제는 로컬 호스트에, 그것은 발생합니다. 프로덕션 서버에 연결하려고 시도했지만 내 개인 인터넷을 오프라인으로 만들 때 어떤 일이 발생하는지 테스트 한 결과 성공 또는 오류를 전혀 호출하지 않고 중단됩니다. 시간 초과 속성을 설정해야합니다.

+1

긍정적 아니,하지만 어쩌면'abort'의 반응은'fail' 다르다? 코드를 게시 할 수 있습니까? – hookedonwinter

+0

아마도 : http://stackoverflow.com/questions/2357147/ajax-how-to-prevent-jquery-from-calling-the-success-event-after-executing-xmlhtt –

+1

어떻게 서버를 다운 시키십니까? 완전히 도달 할 수 있습니까, 아니면 404 페이지를 제공합니까? –

답변

3

이것은 jQuery 1.4.2 버전의 버그 (?)라고 생각합니다.

은 내가 jQuery documentation에서 하나 개의 코멘트를 인용 : JQuery와, 시간 제한/연결 오류에 아약스 오류 콜백을 호출하지 않습니다이 문제를 해결하기 위해

1.4.2에서 다음 뒤 "|| XHR을 제거 .status === 0 "from httpSuccess 함수

jQuery 코드 자체를 수정하려는 경우 확인하십시오. 그것은 까다로운 것 같다

$.ajax({ 
    type: "POST", 
    url: "http://madeUpServerthatdoesnotExist.com/index.php", 
    data: "id=1", 
    success: function(msg){ 
    if(this.xhr().status === 0){ 
      errorHandler(); 
    } 
    else { 
      alert('Success'); 
    } 
    }, 
    error: errorHandler 
}); 

function errorHandler(){ 
      alert('Freakin error'); 
} 

, 더 나은 방법에 대해 당신이 알고있는 경우 의견을주십시오 : 여기 수 있도록처럼 다른 당신은 당신의 성공 콜백에서 확인할 수 있습니다!

편집 :은 조사 후, 나는이, jQuery를에서 버그가 수 있었다 나는 그것은이 버그가 jQuery를 1.4에서 수정되었습니다 보이는 것처럼

+0

이것이 작동하는 것 같습니다. – Kyle

관련 문제