【问题标题】:How can I find out which Javascript causes an Ajax request?如何找出导致 Ajax 请求的 Javascript?
【发布时间】:2011-05-31 12:03:18
【问题描述】:

我在使用 Java JSF 应用程序时遇到问题:在某些情况下,用户操作会导致正确更新 UI 的 Ajax HTTP 请求,但随后会立即触发第二个请求,从而导致第二次不正确的更新。

我如何才能找到(最好使用 Firebug)第二个请求被触发的确切位置?有很多缩小的框架JS代码,所以我不知道在哪里放置断点。将表单 onsubmit 处理程序设置为 console.trace 没有帮助,我想是因为这些是独立的 Ajax 请求。

【问题讨论】:

    标签: javascript ajax jsf firebug


    【解决方案1】:

    在尝试答案中的建议时,我发现 Firebug 已经具备了我所需要的开箱即用功能:Console 选项卡显示所有请求,而对于 Ajax 请求,它会显示它们源自的文件和行号,这告诉我在哪里设置断点...

    【讨论】:

    • 这不是在 chrome 开发者工具中实现的吗?
    • @eugene:很可能,是的。
    • 谢谢迈克尔。作为记录,它位于 Network - Initiator 选项卡中。将鼠标悬停在链接上,它将显示调用堆栈。
    【解决方案2】:

    如果您的 UI 更新中有一些 HTML 更改,您可以使用 Firebug 设置 Breakpoints on DOM (HTML) Mutation Events

    【讨论】:

    • 但这会在收到 response 时触发,不是吗?我需要找出 request 的来源。
    • 当然可以,但是它缩小了您可以选择开始调试的范围。您还可以分析请求、响应、ui 更新周期以缩小活动所在的范围。
    【解决方案3】:

    如果框架抽象了 AJAX 请求,您应该能够跟踪对抽象的调用。例如,jQuery 通过其global AJAX event handlers 允许这样做。

    解决问题的另一种更强大的方法是replace the XHR object 并跟踪对其进行的调用(即,如果框架不提供上述抽象,或者如果您要使用的调用不使用抽象)。只需将页面末尾脚本中的GM_log 替换为console.trace 并将其包含在您正在测试的页面中即可。

    【讨论】:

      【解决方案4】:

      我个人在这种情况下所做的是使用可以将请求或响应“搁置”的 HTTP 代理。例如。 Burp Proxy (这实际上是一个安全工具,但它非常适合用于调试目的)

      启动代理并配置您的浏览器以使用它。导航到 roque 请求的来源页面并激活拦截请求(这可能需要一些练习,因为 Burp Proxy 可能是一个相当复杂的工具)。

      现在执行用户操作,如果一切顺利,代理会拦截它并等待您的确认让它通过。做这个。然后你可能会看到第二个请求到来并被代理拦截。不要让这个通过,而是切换到 Firebug 并暂停到调试器中。希望您随后能够看到它的来源。编辑:再想一想,AJAX 的异步特性可能意味着您无论如何都无法通过这种方法看到确切的位置...... :(

      至少您还可以将其配置为拦截响应。请求和响应都可以即时编辑,这对于试验和调试非常有用,并且可能有助于缩小问题范围。

      【讨论】:

        【解决方案5】:

        这可能会有所帮助,调用者是 javascript Function 对象中的一个方法。

        console.log(arguments.callee.caller.toString());

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-07-24
          • 2012-05-15
          • 2016-06-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-05
          相关资源
          最近更新 更多