根据你说的,我给出以下评价:
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 在您身边呈现该信息。所以,不要抓整个数据+演示,只抓数据,然后在你身边做自己的演示。它整洁多了。