调试作为Ajax响应一部分的javascript代码

调试作为Ajax响应一部分的javascript代码,javascript,asp.net,ajax,debugging,firebug,Javascript,Asp.net,Ajax,Debugging,Firebug,因此,在我的网站中,我使用jquery通过ajax获取数据。作为ajax响应的一部分,一些javascript代码也会被执行。问题是如何在firebug或其他工具中调试此javascript。这是我迄今为止的经验: 放置调试器;不起作用 对于某些javascript,无法设置断点,因为该脚本尚未加载 即使这个新的javascript调用了其他一些已经加载的函数(例如,我可以在firebug中看到它并设置一个断点),该函数上的断点仍然不会被触发 但是,javascript确实可以正常执行,甚至

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

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

但是,javascript确实可以正常执行,甚至像console.log这样的东西也可以工作,但似乎无法调试它。

我知道Firebug和IE开发人员工具会尊重debugger语句。所以我会把它放在回答的顶部

debugger;

func1();
func2();

如果您使用Google Chrome,请查看此问题的答案:

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

//@ sourceURL=dynamicScript.js

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

我觉得这是一个糟糕的设计决策:恕我直言,我认为您不应该将代码作为对
XMLHttpRequest
的响应发送(并使用
eval
或函数构造函数来执行该代码).我还想说,这听起来更像是错误的设计决策。。你能告诉我们为什么要把脚本和数据一起加载吗?应该有另一个简单的解决方案,它将得到很好的支持,并且易于在响应中调试,我有类似$(document).ready(function{..})的代码,因此,不必在ajax调用的成功处理程序中执行代码,我发送javascript作为响应的一部分来完成特定任务。不知道这种方法有什么错吗?这是一个巨大的安全风险,在运行时评估代码的速度很慢,并且(如您所见)会出现调试问题。您最好静态定义该代码,并让回调处理程序运行该函数,而不是将其作为响应的一部分发送。因为某些攻击者可能会动态更改获取send的代码(例如,通过更改存储的代码,窃取Cookie并从其他用户的帐户中执行恶意任务)。在(客户机的)服务器上更改静态文件要困难得多;语句在这种情况下不起作用,即javascript作为ajax响应的一部分执行。这种情况非常有效,应该将此答案标记为正确答案!:)