2014-04-24 2 views
1

이것은 자주 관찰되는 동작입니다. jQuery 비동기 AJAX 호출은 Firebug를 열지 않고도 실행되는 동안 완벽하게 작동합니다. 그러나 Firebug가 열리고 코드의 다른 부분에 중단 점을 넣어서 디버깅 할 때 AJAX 콜백 이벤트가 발생하지 않습니다.jQuery Firebug를 통해 디버깅 할 때 AJAX 콜백이 실행되지 않습니다.

내 가정은 코드의 다른 관련이없는 부분에서 이미 단계별로 디버깅 중이므로 으로 이스케이프 처리됩니다. 이 가정이 맞습니까? 그렇다면 콜백 발생을 항상 방지하려면 어떻게해야합니까? 그렇지 않다면 내가 뭘 잘못하고 있니?

답변

1

내 가정은 내가 이미 코드의 다른 관련이없는 부분을 단계별 디버깅하고 있기 때문에, 아약스 응답 콜백 이벤트가 탈출하기 입니다 것입니다. 이 가정이 맞습니까?

예, 방화 광 1.x. Firebug 2.0에서는 fixed이지만 (이 답변을 베타 단계에서 작성한 시점).

예. 다음 코드를 체크 아웃 :

<script type="text/javascript"> 
function makeRequest() 
{ 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", "test.php"); 

    xhr.onreadystatechange = function() 
    { 
     if (xhr.readyState === XMLHttpRequest.DONE) 
      console.log("Request finished"); 
    } 

    xhr.send(null); 
    debugger; 
} 
</script> 
<button onclick="makeRequest()">Make request</button> 

당신이 Request finished 콘솔에 로그인 할 기대할 수 만들기 요청 버튼을 클릭합니다. 최대 1.12.8의 Firebug에서 출력은 2.0에 있지만 콘솔에는 나타나지 않습니다. Firebug 2.0 adapts new debugger APIs이 Firefox에서 노출되어이 문제가 해결 되었기 때문입니다.

onreadystatechange에 대한 비동기 호출은 지연되지 않습니다. 즉, debugger 키워드로 중지 한 경우에도 여전히 실행됩니다. 따라서 console.log("Request finished")의 중단 점은 이 아니고이 맞을 것입니다.

비동기 함수를 실행하면 디버거가 스크립트 실행을 계속 대기하는 Chrome, Opera 및 Internet Explorer의 JavaScript 엔진과 차이가 있습니다.

+0

위의 console.log (...)에서 중단 점이 발생하지 않는다는 것에 동의합니다. 그러나 새로운 디버거가 console.log를 인쇄하기를 바랍니다. 나는 디버그 모드와 일반 모드에서 실행될 때 아약스 응답의 관점에서 시스템의 동작이 달라져서는 안된다는 것을 의미합니다. –

+0

Firebug 2.0을 사용해 볼 수 있습니다. 그냥 [addons.mozilla.org에서 최신 베타 버전을 다운로드하십시오] (https://addons.mozilla.org/firefox/addon/firebug/#beta-channel). 비록 그것이 현재 [Aurora version] (https://www.mozilla.org/firefox/aurora/)으로 제공되고있는 Firefox 30 이상이 필요합니다. –

관련 문제