【问题标题】:Unable to locate the callback handler找不到回调处理程序
【发布时间】:2015-04-24 15:27:01
【问题描述】:

website 上,我试图找出当我在“州/UT”的第一个选择框中选择时调用的部分,然后填充“区/市”选择框。

我在 Firefox 上使用 Firebug,并在 WebResource.axd 文件中的所有函数中打开了断点。我还尝试了 Firebug 中的 Break on Next 选项,但它会将我带到 ScriptResource.axd 中的一些缩小代码。

我想在“District/City”中捕获 AJAX 调用返回的数据,以便我可以使用 VIEWSTATE 和 EVENTVALIDATION 值通过使用 PHP 的 POST 提交来链接下一个调用。

我找不到 AJAX 回调处理程序部分。如何找到它?

选择框的 onchange 处理程序有:

javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$ddlSate\',\'\')', 0)

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

【问题讨论】:

  • __doPostBack中放一个断点。
  • @Bergi 我已经提到过..当我在“State/UT”选择框中选择时,它并没有停在那里。
  • 我在 Firefox 和 Chrome 中调试代码部分时也遇到了问题。您是专门针对这个问题提出的问题,还是对从代码中学习一些东西更感兴趣?
  • 是的,很高兴知道为什么我也无法调试它。它似乎无法正常工作。所以我的问题是关于两者的。
  • 这段代码是由asp.net ajax库自动生成的,定制起来不太灵活。但我不确定你为什么要使用 php 提交?你能解释一下吗?

标签: javascript debugging firebug handler


【解决方案1】:

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

这是堆栈跟踪:

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

b.innerHTML = g

请注意,这是formatted script 的行号,而实际脚本已被缩小。

【讨论】:

【解决方案2】:

Firebug 的Net panel has a Break On XHR 选项,可帮助您定位请求发生的位置。

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

几行之后(在第 4221 行),您会发现响应处理函数(称为 _onReadyStateChange)被分配给请求的 onreadystatechange 属性。

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

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

【讨论】:

    猜你喜欢
    • 2018-03-26
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 2017-09-30
    相关资源
    最近更新 更多