【问题标题】:How to find out which Javascript causes a jQuery Ajax request?如何找出导致 jQuery Ajax 请求的 Javascript?
【发布时间】:2018-03-30 10:33:18
【问题描述】:

如何找到触发 Ajax 请求的 Javascript 代码?在 Firebug 的控制台中我们可以识别文件和行号,但是如果我们使用$.ajax$.post 或 jQuery 的一些类似功能,它只会在 Firebug 的控制台中记录 jQuery 库文件。有什么办法可以得到jQuery函数的实际触发点?

【问题讨论】:

  • 在所有 ajax 调用中使用 console.log(unique names) 并运行它。执行时可以看到控制台
  • 如果你使用chrome,只需在控制台中开启日志XMLHttpRequests
  • 取决于你想要做什么。要么像 Nirus 说的那样,要么你总是可以使用未缩小的 jQuery 版本并在请求发生的地方设置断点或使用 chrome XHR 断点,然后你可以看到整个调用堆栈。
  • 我希望,我们无法使用 javascript 调试 jquery API 实现
  • @Udhay 在开发工具中使用 Chrome 你在右侧有Sources 你会看到XHR Breakpoints 如果你检查Any XHR 你的脚本将在每次请求时暂停使用XMLHttpRequest(所以任何不使用jsonp 的请求)。使用Call Stack(也在右侧),您将看到请求的来源。

标签: javascript jquery


【解决方案1】:

在你拥有SourcesDevTool中使用Chrome

如果您打开它,您将在右侧看到XHR/fetch Breakpoints,如果您选中Any XHR,您的脚本将在每个使用XMLHttpRequest 的请求时暂停(因此任何不使用jsonp 的请求) .

如果Any XHR 选项不可用(仅列出No Breakpoints),那么您必须单击+Break when URL contains: 字段留空并按回车键。这将创建Any XHR 选项。 (感谢Yasmin French 提供此信息)

使用Call Stack(也在右侧),您将看到请求的来源。

但正如我所提到的,这不会在jsonp 请求上中断,如果您想跟踪这些请求,您需要使用jQuery 的未缩小版本(或包含缩小版本的源映射)并在其中设置断点来源在正确的部分。要找到这部分,您可以使用以下步骤:

  1. 在您的代码中创建jsonp 请求并在此位置设置断点。
  2. 调用这部分代码以便切换到调试器。
  3. 使用Step into,现在您应该在jQuery 代码中。如果您现在在此处设置断点,Chrome 将针对每个 jsonp 请求停止。

注意:有时 Chrome(可能仅在 betadev 版本中)在重新加载时往往会丢失断点,因此您需要检查它们在重新加载时是否仍然存在。

【讨论】:

  • 我没有看到任何 XHR 复选框。是否已在更高版本的 Chrome 中删除?
  • @Tony_Henrich 在最新的 Chrome 版本 (55.0.2883.95) 中仍然存在。
  • @Tony_Henrich 如果你已经弄清楚了,那么这个评论是给未来想要找出答案的人的,点击+按钮或右键点击add breakpoint然后在出现字段时按回车为空白,它将使用any xhr 复选框自动填充
  • @YasminFrench 感谢您提供的信息,我已经更新了我的答案。我不知道我必须这样做,这可能是因为某些版本的 Chrome 和保留在我的设置中,因为它之前已经存在。
【解决方案2】:

这在早期的 Chrome 版本中可能不存在,但版本 56.0.2924.87 有一个“Initiator”列,它告诉 html/js 文件以及该文件中发起请求的确切行。

此请求可以是 XHR、对 jpg、css 或其他任何内容的 http 请求。

非常简洁,有助于追溯请求。

这里是如何使用它?

  1. 按“F12”打开开发者控制台。
  2. 在每个请求中查找“Initiator”列,可以看到“jquery.min.js:4”,表示请求是从“jquery.min.js”文件的第4行发起的。

【讨论】:

  • 这并不总是有效,因为有时 Chrome 会报告 Other
  • 虽然无关紧要,但 IE 有不错的启动按钮!
【解决方案3】:

在 chrome 和 firefox/firebug 中,您可以在 .always() 或您的 ajax 调用的 beforeSend 处理程序上使用 console.trace() 来查看是谁调用了它。

【讨论】:

  • 据我了解,您想了解您的哪些事件触发了 ajax 请求。这样你就可以找到调用它的函数。还是我理解错了?
猜你喜欢
  • 2011-05-31
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
  • 2014-03-20
相关资源
最近更新 更多