【问题标题】:Debugging javascript code that comes as part of Ajax Response调试作为 Ajax 响应一部分的 javascript 代码
【发布时间】:2011-06-10 15:48:09
【问题描述】:

所以在我的网站中,我使用 jquery 通过 ajax 获取数据。作为 ajax 响应的一部分,一些 javascript 代码也会被执行。问题是如何在 firebug 或其他工具中调试这个 javascript。这是我目前的经验:

  • 放入调试器;不工作
  • 对于某些 javascript,无法设置断点,因为该脚本尚未加载。
  • 即使这个新的 javascript 调用了一些其他已经加载的函数(即我可以在 firebug 中看到它并设置一个断点),该函数上的断点仍然没有被触发

但是,javascript 确实可以正常执行,甚至诸如 console.log 之类的东西也可以工作,但似乎无法调试它..

【问题讨论】:

  • 这在我看来是一个糟糕的设计决定:恕我直言,我认为您不应该将代码作为对 XMLHttpRequest 的响应发送(并使用 eval 或函数构造函数来执行该代码)。
  • 我还要说这听起来更像是错误的设计决定。你能告诉我们更多为什么你将那个脚本和数据一起加载吗?应该有一个简单的解决方案,它会得到很好的支持,并且易于调试
  • 在响应中,我有类似 $(document).ready(function{..}) 的代码,所以我没有在 ajax 调用的成功处理程序中执行代码,而是将 javascript 作为一部分发送完成某些任务的响应..不明白这种方法有什么问题?
  • 这是一个巨大的安全风险,在运行时评估代码很慢,并且(如您所见)给调试带来了问题。您最好静态定义该代码并让回调处理程序运行该函数,而不是将其作为响应的一部分发送。
  • 因为某些攻击者可能会更改动态发送的代码(例如,通过更改存储的代码并窃取 cookie 并从其他用户的帐户中执行恶意任务)。更改(客户端)服务器上的静态文件要困难得多。

标签: javascript asp.net ajax debugging firebug


【解决方案1】:

如果您使用 Google Chrome,请查看以下问题的答案: https://stackoverflow.com/a/10929430/482916

您需要在 ajax 加载的 JS 脚本中添加以下注释:

//@ sourceURL=dynamicScript.js

其中 dynamicScript.js 是将在控制台中出现的脚本的名称。

【讨论】:

  • 这很好用,这个答案应该被标记为正确答案! :)
【解决方案2】:

我知道 Firebug 和 IE 开发工具会尊重调试器声明。所以我会把它放在响应的顶部。

debugger;

func1();
func2();

【讨论】:

  • 不幸的是调试器;语句在这种情况下不起作用,即 javascript 作为 ajax 响应的一部分执行
猜你喜欢
  • 1970-01-01
  • 2012-12-10
  • 2019-09-01
  • 1970-01-01
  • 2014-07-15
  • 2022-08-14
  • 2011-06-11
  • 1970-01-01
  • 2013-04-21
相关资源
最近更新 更多