全部,我知道我们可以使用load方法将动态内容加载到div中。 但就我而言,我在使用它时发现了一个问题。 如果要在完全相同的页面中加载包含一些外部js文件的同一页面。你会发现相同的js将加载两次。一个是第一次打开页面,第二个是当ajax加载同一页面时。所以我认为这个案例会存在一些潜在的问题。例如,如果你在js文件中初始化的JavaScript中为变量设置一个值,在加载页面后,你会发现它将被恢复为初始值。我能找到的解决方案之一是使用IFrame,是否有有什么好办法吗?感谢。
代码如下所示。
test.html中的
<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="test.js"></script>
<script type="text/javascript">
$(function(){
$("#loadBtn").on("click", function(event)
{
$('#container').load('test.html');
});
$("#getTest").on("click", function(event)
{
alert(test);
});
$("#changeTest").on("click", function(event)
{
test="changed";
});
});
</script>
</head>
<body>
<div id="container" style="width:200px;height:200px; padding:10px; border:1px solid black;"></div>
<input type="button" id="loadBtn" value ="Load"/>
<input type="button" id="getTest" value="gettest"/>
<input type="button" id="changeTest" value="changetest"/>
</body>
</html>
在test.js
中var test="1";
答案 0 :(得分:1)
我相信您只能通过在加载函数中添加另一个特定div来加载页面的某些内容,如下所示:
$("#area").load("something.html #content");
答案 1 :(得分:0)
只需更改所用变量的名称,即标识符不会发生冲突。 无论如何,我真的不明白你为什么要在同一页面内加载页面。如果您只想异步重新加载页面,那就不是这样做了。
尝试location.reload()
答案 2 :(得分:0)
执行此操作的方法是添加检查以查看是否已加载此文件。像这样:
if (!window.testjs){
window.testjs = {};
}
if (!window.testjs.loaded) {
var test="1";
window.testjs.loaded = true;
}
这种方法虽然有弱点。它将更多的命名空间和变量放入全局。但是当您创建命名空间时,命名冲突的可能性会降低。
答案 3 :(得分:0)
$.ajaxSetup ({
// Disable caching of AJAX responses
cache: false
});
我发布了另一个解决您问题的问题的回复。 请参阅:Stop jQuery .load response from being cached
简而言之,您应该使用$ .ajax({...}),或者如果您想继续使用$(“...”)。load(),您需要为您的URL传递时间戳,如: http://example.com?ts=12233232323 如果您获得类似上述网址的内容,则您的回复将不会被缓存,因为当您的网址的任何部分发生变化时,Javascript会将您的网址视为新网址。
所以有两个选择,你决定你想要用什么。