這是一種經常被觀察到的行爲。 jQuery異步AJAX調用在無需打開Firebug的情況下運行時完美無缺。然而,當Firebug打開並且我正在通過在代碼的其他部分放置一些斷點來進行調試時,AJAX回調事件不會觸發。通過Firebug進行調試時未執行jQuery AJAX回調
我的假設是,由於我已經在另一個不相關的代碼部分逐步調試,所以AJAX響應回調事件變得轉義。這個假設是正確的嗎?如果是的話,我如何確保總是回調火災?如果不是,我做錯了什麼?
這是一種經常被觀察到的行爲。 jQuery異步AJAX調用在無需打開Firebug的情況下運行時完美無缺。然而,當Firebug打開並且我正在通過在代碼的其他部分放置一些斷點來進行調試時,AJAX回調事件不會觸發。通過Firebug進行調試時未執行jQuery AJAX回調
我的假設是,由於我已經在另一個不相關的代碼部分逐步調試,所以AJAX響應回調事件變得轉義。這個假設是正確的嗎?如果是的話,我如何確保總是回調火災?如果不是,我做錯了什麼?
我的假設是,既然我已經調試一步一步 另一個代碼無關的部分,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引擎不同,在這些引擎中異步函數的執行正在等待調試器繼續執行腳本。
我同意在console.log(...)上面的斷點不會被擊中。但是我希望新的調試器能夠打印console.log。我的意思是,當我在調試模式和正常模式下運行時,系統在ajax響應方面的行爲應該不會有所不同。 –
你可以試用Firebug 2.0。只需[從addons.mozilla.org下載最新的測試版](https://addons.mozilla.org/firefox/addon/firebug/#beta-channel)。儘管請注意,它至少需要Firefox 30,它目前可用作[Aurora版本](https://www.mozilla.org/firefox/aurora/)。 –