无法定位回调处理程序

3
在一个网站上,我试图找到在“州/联合领土”第一个选择框中选择时调用的部分,以及随后填充“区/城市”选择框的部分。
我正在使用Firefox上的Firebug,并在WebResource.axd文件中的所有函数中打开了断点。我还尝试了Firebug中的“下一步中断”选项,但它将我带到ScriptResource.axd中的一些缩小的代码。
我想捕获“区/城市”中的AJAX调用返回的数据,以便我可以获取VIEWSTATE和EVENTVALIDATION值,通过PHP进行POST提交来链接下一个调用。
我无法找到AJAX回调处理程序部分。如何找到它?
selectbox的onchange处理程序为:
javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$ddlSate\',\'\')', 0)

但是,当我在此函数中设置断点时,脚本执行不会停止。

__doPostBack 中设置一个断点。 - Bergi
@Bergi 我已经提到过...当我在“州/联合领土”选择框中进行选择时,它不会停止于此。 - user5858
我也遇到了在Firefox和Chrome中调试代码部分的问题。你的问题是关于这个问题特别是什么,还是更想从代码中学习一些东西? - Alexander O'Mara
是的,了解为什么我也无法调试它会很好。它似乎无法正常工作。所以我的问题涉及两个方面。 - user5858
这段代码是由asp.net ajax库自动生成的,它并不太灵活以进行定制。但我不确定为什么您想要使用php提交?能否请您解释一下? - Aman B
2个回答

2
Chrome DevTools有一种非常有用的方法可以在这种情况下停止脚本执行。在Elements面板中,您可以右键单击任何节点,然后在上下文菜单中选择Break On...。它有几个选项,但对于这种情况,Subtree modifications是正确的开始方式(AJAX响应是HTML片段,因此JavaScript很可能会更改网页的DOM)。
以下是堆栈跟踪:

JavaScript call stack

f._onReadyStateChange 绑定了我们的 AJAX 就绪状态事件。可以通过调试器中可见的 _url 变量来证明。我没有探索那里发生了什么。无论如何,e._updatePanel() 在第 1158 行将响应中的 HTML 插入到 DOM 中:

b.innerHTML = g

请注意,这是格式化脚本的行号,而实际脚本已被压缩。


请注意,Firebug是第一个具有DOM元素的“中断”功能的工具,并且它仍然比其他开发工具具有更多的“中断”功能。有关详细信息,请参见HTML面板上下文菜单其他一些中断功能 - Sebastian Zartner

0

Firebug的Net面板有一个Break On XHR选项,可以帮助您定位请求发生的位置。

启用该选项后,脚本执行将在调用XMLHttpRequest的send()函数的点处中断。

在几行代码上方(第4221行),您将找到响应处理程序函数(称为_onReadyStateChange)被分配给请求的onreadystatechange属性。

在代码中搜索函数定义,并在检查.readyState === 4(表示请求已完成)之后设置断点。

然后,当您从下拉列表中选择某个内容时,您的执行将在该点停止。然后,您可以在Watch侧面板中看到响应文本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接