有没有一种方法可以使用AJAX只加载一次页面?

3

我有一个AJAX调用,用于在页面加载后加载一个函数,该函数打开一个类似于带有一些数据的灯箱框架。问题是,如果我点击关闭(灯箱框架),页面会再次加载并且不断地加载框架,因此用户永远无法到达框架下面的页面,因为框架在无限循环中加载。我猜测Ajax正在重复调用函数,但我希望只加载一次框架,并且当用户点击X(关闭)时,可以返回到原始页面。

$(document).ready(function(){
var city = $('#citycode').html();

$.ajax({
//when page is loaded, fire the following function
success: function(){
//the function to be fired located in the page in seperate file
openX(city + //some other parameters);
}});


});

任何建议?
3个回答

4

您可以在页面顶部设置一个全局变量,并在页面加载完成后将其设置为true,然后在代码中检查变量是否为false,如果是,则加载页面,否则不加载。以下是原型:

<script type="text/javascript">

var loaded = false;

$(document).ready(function(){
var city = $('#citycode').html();

$.ajax({
//when page is loaded, fire the following function
success: function(){
if (loaded === false)
{
  //the function to be fired located in the page in seperate file
  openX(city + //some other parameters);
  loaded = true;
}
}});


});
</script>

非常感谢,我认为这可能是最好的解决方案,但我不确定这是否会百分之百地起作用,因为我们在框架本身上有“关闭”链接而不是页面。我们是否需要以某种方式处理该链接的onclick事件? - digitup
我已经修改并尝试了您的代码,但是一旦我点击关闭按钮仍然会出现无限循环。还有其他提示吗? - digitup

1
jQuery可能会添加一个随机的“cache”参数以防止缓存。尝试在ajax调用中将缓存属性设置为true以允许缓存;你的代码可能如下所示:
$.ajax({
  cache: false;
  success: function(...){...},
  ...
});

非常感谢,由于我们加载实时数据,缓存可能会导致不正确的结果!! 我不知道我将不得不尝试您的方法。谢谢您的答案。 - digitup

1

我对你的问题的理解方式与其他答案不同,所以我来回答一下... :)

我猜关闭按钮是一个超链接,而默认操作(改变页面的URL)没有被阻止?

如果这样听起来正确,你需要通过捕获链接上的点击事件并调用preventDefault()方法来阻止默认操作。

在没有看到你的代码的情况下,这是我能给出的最好的例子:

$('div.lightbox').live('click', function (event) {
  event.preventDefault();
});

请注意这里使用了live()

非常感谢,这听起来像是一个解决方案,但我仍然希望用户能够关闭打开的框架并访问正常页面,因为该框架是在页面内容之上打开的。 - digitup
也许我没有解释 preventDefault() 的使用方法。单击锚标签的默认操作是打开其href属性中的URL。在表单中单击提交按钮的默认操作是提交该表单。到目前为止都没什么大不了的。调用 preventDefault() 仍将执行已绑定到事件上的所有事件处理程序(即关闭相关的框架),但会防止默认操作的执行;例如,防止页面重新加载。 - Matt
再次感谢,马特。在哪里放置处理链接的代码最好?是在我的代码之前还是在我的ajax调用执行后? - digitup
在这里使用 live() 意味着您可以将此代码插入到您的 $(document).ready() 块中而不会出现问题。 - Matt
谢谢Matt,感谢你的帮助。我会尽快尝试并告诉你结果。 - digitup
Matt,我已经尝试了你的方法,很抱歉地说它并没有起作用,你还有其他的提示吗? - digitup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接