2010-07-14 271 views
16

我有一個頁面在提交表單時發送XHR請求,我希望Chrome在收到響應時斷開。這似乎是最好的方式來實現這一點,如果Chrome有一個JavaScript函數,我可以打電話,打破執行,但我一直無法找到類似的東西。還有其他解決方案嗎?在Chrome中設置XHR中的斷點

編輯

我實際上沒有對請求中定義的回調,所以我不能設置一個斷點的方式。 該請求被髮送與該線的jQuery代碼:

$.post(this.action, $(this).serialize(), null, "script"); 

其中this是一種形式的元素。 null參數是您通常定義回調的地方,但是"script"參數的原始javascript由服務器返回,然後直接執行,因此它似乎是破解和逐句通過代碼的唯一方法,與debugger;語句一樣。這是有效的,但是在逐步完成代碼時,你實際上看不到你在哪條線上,所以它有點尷尬。我懷疑這是Chrome調試工具的限制。

+0

我不明白。如果您將回調歸零,是否不會忽略所有回覆?您希望調試器在哪裏破解? – syockit 2010-08-24 09:41:52

回答

12

您可以在成功回調中設置一個斷點並逐步調試。設置斷點:

  1. 打開「開發工具」,然後單擊頂部的「腳本」選項卡。
  2. 選擇包含AJAX請求成功回調的腳本。
  3. 單擊想要斷點的左側的行號。將出現一個藍色箭頭,指示已設置斷點。
  4. 然後按照你的想法創建AJAX請求,調試器將自動停在你設置的斷點處。

或者,您可以使用debugger語句來自動調用調試器。所以用這個你成功的回調可能看起來像:

success: function(data, textStatus, request) { 
    debugger; // pause execution and opens debugger at this point 
    ... 
} 

而且結帳這個漂亮的article調試JavaScript。

但是,第一種方法更好,因爲它不需要您修改代碼。

+0

謝謝你深思熟慮的答案。調試器語句讓我更加接近。我編輯了我的問題,以澄清我實際上沒有定義回調函數,因此使用調試器設置斷點似乎是唯一的選擇。 – delivarator 2010-07-15 18:30:00

10

您也可以轉到開發人員工具中的腳本選項卡,並在右側單擊XHR斷點並通過URL過濾添加新斷點。

如果使用jQuery,當發生斷點時,可以使用CallStack來查找稱爲jQuery.ajax的函數。

10

下拉鉻控制檯(按Ctrl + Shift + J),然後鍵入任何這些:

就改寫了jQuery AJAX:

var prevajax = jQuery.ajax; 
jQuery.ajax = function() { debugger; return prevajax.apply(jQuery, arguments); }; 

,或者如果你不使用jQuery,改寫XHR類別:

var prevxhr = XMLHttpRequest; 
XMLHttpRequest = function(){debugger; prevxhr.apply(this, arguments);}; 

中斷後,只需按shift + f11,直到找到啓動ajax請求的方法。