我使用的是 jquery-ui-widget 的一个版本,1.10.3
,它适用于 ajax 加载的页面片段 #1,但如果片段#2 在之后加载,则会触发页面片段#2 的错误/strong> 片段#1。
这很奇怪,因为即使我在 ajax 加载片段 #2 时尝试用 1.8.21
覆盖 1.10.3
(是的,我意识到这是一个糟糕的 hack ),使用小部件工厂的代码仍会尝试使用 1.10.3
,因此会导致错误。
请注意,这不是正常页面加载期间的问题,因为 1.8.21
在我的 ajax div id="ajax_content"
之外每次都会加载。
如何在 ajax 期间覆盖 1.10.3
?
<html>
<div id="ajax_content">
Page fragment #1 content
<script src="jquery-ui-widget.1.10.3.js"></script>
</div
<script src="jquery-ui-widget.1.8.21.js"></script>
</html>
对比
<html>
<div id="ajax_content">
Page fragment #2 content
<script src="jquery-ui-widget.1.8.21.js"></script>
//having this script here or not has no effect if 1.10.3 was already loaded
</div>
<script src="jquery-ui-widget.1.8.21.js"></script>
</html>
最佳答案
jquery-ui-widget 版本 不会有效果。相反,您的问题的原因是添加到您的 div id="ajax_content"
的 innerHTML
的脚本将不会执行。
动态添加的脚本(可能作为 ajax 请求的响应接收或使用 js 或 jQuery 动态添加到 innerHTML
)不执行。此外,根据@Kevin B 的评论,不推荐。我通过以下两种解决方案之一解决了同样的问题:
- 首先加载整个脚本
- 使用 head 标签中的脚本加载新页面
您可能不同意这里的第二个解决方案,说问题是关于作为 ajax 响应收到的脚本,而我建议您重新设计您的方法并改用单独的页面。由于各种原因,这可能不适合您的场景,但如果阻止您这样做的唯一原因是这会导致代码重复,那么您可以探索使用类似 jsp:include
.
关于javascript - AJAX 不会覆盖已经加载的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20612505/