Javascript script/dom dependency?

Javascript script/dom dependency?

本文关键字:dependency dom script Javascript      更新时间:2023-09-26

当帮助某人使用一个相当大的网站并且包含许多内容时,我遇到了一个错误并且无法理解它。是这样的

<script src=...></script>
<div ...
<script>
alert('myscript');
</script>

这个页面工作得很好,直到我使用html的那部分并使用jquery来ajax内容。它破坏了代码,但我不明白为什么。我看到了我的警报。我可以看到正在通过浏览器网络日志访问该脚本。我看到了第一个脚本标签的一些结果,但它坏了。

为什么订单很重要?我认为只要 dom 准备就绪并且脚本已执行,一切都应该没问题。但在这种情况下,被 ajaxed 打破了它。我不能花太多时间,但很好奇看到一些东西取决于时间。

--编辑--
我还注意到,如果脚本已经包含在内容中的页面上,它将运行良好

有谁知道为什么内容中断的 ajaxing?当它没有在它的罚款中。

根据你说的,我给出以下评估:

40% 的可能性 - 这是关于脚本负载。ajaxed 脚本中对其他脚本的依赖关系、您在页面上定义的变量,甚至是应该加载的 DOM 内容,在脚本被 ajaxed 并执行时可能无法加载。尝试更改页面上脚本标记的顺序,将脚本的加载放在文档ready事件处理程序中,或使用setTimeout或defer="defer"延迟脚本执行 - 或者如果你真的很酷,创建一个引导加载程序,确保每个脚本都按照您指定的确切顺序加载和执行: 通过将无依赖性同时加载集链接到相关负载序列。

脚本 1 <----取决于---(脚本 2.1、脚本 2.2、脚本 2.3) <---取决于--- Script3。

所以先加载 1,然后加载所有 2. 脚本,然后加载 3。

40%的可能性 - 这是关于安全模型的。你从哪里来的,那在哪里?它与页面所在的域有什么关系?您是否在localhost上对此进行测试?如果是这样,则有更多限制。在实际服务器上呢?是否在 ajax 响应上正确设置了访问控制允许源标头?

20% 的可能性 - 它是脚本和 DOM 之间的循环依赖关系。 假设元素 X 上的某个事件处理程序在引用元素 X 的作用域上关闭。然后,在对 X 的引用中将有一个对 X 的引用,因此它们不能都被垃圾回收,因此 X 将持续存在,导致内存泄漏,并可能创建一个可能破坏代码的不可用引用。

--编辑--

根据您对.html(...)的评论,我认为运行脚本.html或 .load 太混乱了,甚至可能根本不起作用。请参阅 .load() 不加载脚本,了解使用 ajax 加载脚本的好方法。或者你可以jQuery.getScript(...).

此外,我似乎记得即使在使用 ajax 从纯 HTML 加载 html 节点时也会遇到问题。对我来说似乎太乱了。如果你想在ajax之间传输结构化信息,请使用JSON,然后用javascript和HTML呈现这些信息。所以,不要抢整个数据+演示,只是抓住数据,然后在你这边做自己的演示。它更整洁。