2014-04-24 100 views
1

這是一種經常被觀察到的行爲。 jQuery異步AJAX調用在無需打開Firebug的情況下運行時完美無缺。然而,當Firebug打開並且我正在通過在代碼的其他部分放置一些斷點來進行調試時,AJAX回調事件不會觸發。通過Firebug進行調試時未執行jQuery AJAX回調

我的假設是,由於我已經在另一個不相關的代碼部分逐步調試,所以AJAX響應回調事件變得轉義。這個假設是正確的嗎?如果是的話,我如何確保總是回調火災?如果不是,我做錯了什麼?

回答

1

我的假設是,既然我已經調試一步一步 另一個代碼無關的部分,Ajax響應回調事件是 越來越逃脫。這個假設是正確的嗎?

是的,在Firebug 1.x中。雖然這是在Firebug 2.0中的fixed(在撰寫此測試階段的答案時)。

E.g.看看下面的代碼:

<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記錄到控制檯。 在Firebug最高爲1.12.8的情況下,輸出不會出現在控制檯中,而在2.0中則會出現。 這是因爲Firefox公開的Firebug 2.0 adapts new debugger APIs,它解決了這個問題。

雖然請注意,onreadystatechange的異步調用不會被延期。這意味着即使您在debugger關鍵字處停止,它仍會執行。所以在console.log("Request finished")的斷點處將會出現而不是

這與Chrome,Opera和Internet Explorer的JavaScript引擎不同,在這些引擎中異步函數的執行正在等待調試器繼續執行腳本。

+0

我同意在console.log(...)上面的斷點不會被擊中。但是我希望新的調試器能夠打印console.log。我的意思是,當我在調試模式和正常模式下運行時,系統在ajax響應方面的行爲應該不會有所不同。 –

+0

你可以試用Firebug 2.0。只需[從addons.mozilla.org下載最新的測試版](https://addons.mozilla.org/firefox/addon/firebug/#beta-channel)。儘管請注意,它至少需要Firefox 30,它目前可用作[Aurora版本](https://www.mozilla.org/firefox/aurora/)。 –