1

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

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

在我使用 html 的那部分并使用 jquery 将内容插入之前,此页面运行良好。它破坏了代码,但我不明白为什么。我看到了我的警报。我可以看到脚本正在通过浏览器网络日志进行访问。我看到了第一个脚本标记的一些结果,但它已损坏。

为什么顺序很重要?我认为只要 dom 准备好并且脚本执行完毕,一切都应该没问题。但在这种情况下,被 ajaxed 破坏它。我不能花太多时间,但很高兴看到某些事情取决于时间。

--edit--
我还注意到如果脚本已经包含在页面中,它会运行良好

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

4

1 回答 1

1

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

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

Script1 <---- 取决于 --- (Script 2.1, Script 2.2, Script 2.3 ) <--- 取决于 --- Script3。

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

40% 的可能性——这与安全模型有关。您从哪个网站进行 ajaxing,那在哪里?它与页面所在的域有什么关系?您是否正在对此进行测试localhost?如果是这样,则有更多限制。在实际服务器上呢?是否在 ajax 响应中正确设置了 Access-Control-Allow-Origin 标头?

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

- 编辑 -

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

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

于 2013-01-26T23:42:31.290 回答