2010-07-14 272 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请求的方法。