【问题标题】:Is there away to load a page only once with AJAX?是否可以使用 AJAX 仅加载一次页面?
【发布时间】:2011-02-14 17:36:18
【问题描述】:

加载页面后,我有一个 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);
}});


});

有什么建议吗?

【问题讨论】:

    标签: jquery ajax


    【解决方案1】:

    您可以在页面顶部设置一个全局变量,并在页面加载后将其设置为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>
    

    【讨论】:

    • 非常感谢,我认为这可能是最好的解决方案,但是我不确定这是否会 100% 工作,因为我们在框架本身而不是页面上有关闭链接。我们是否必须以某种方式处理该链接的 onclick?
    • 我已更改并尝试了您的代码,但单击关闭按钮后仍会出现无限循环。还有其他提示吗?
    【解决方案2】:

    jQuery 可能会添加一个随机的“缓存”参数来禁止缓存。尝试在 ajax 调用中添加将 cache 属性设置为 true 以允许缓存;您的代码可能如下所示:

    $.ajax({
      cache: false;
      success: function(...){...},
      ...
    });
    

    【讨论】:

    • 非常感谢,由于我们加载的是实时数据,缓存可能会导致错误的结果!!我不知道我将不得不尝试你的方法。感谢您的回答
    【解决方案3】:

    我以与其他答案不同的方式解释了您的问题,所以这里是……:)

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

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

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

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

    注意这里使用live()

    【讨论】:

    • 非常感谢,这听起来像是一个解决方案,但我仍然希望用户能够关闭打开的框架并到达正常页面,因为框架是在页面内容本身上方打开的。
    • 可能我没有解释preventDefault()的用法。单击锚标记的默认操作是在其href 属性中打开 URL。单击表单中的提交按钮的默认操作是提交所述表单。到目前为止大不了。调用preventDefault() 仍将执​​行已绑定到事件的所有事件处理程序(即关闭有问题的框架),但是,顾名思义,将阻止执行默认操作;例如,防止页面重新加载。
    • 再次感谢马特,在哪里放置处理链接的代码的最佳位置?在我的代码之上还是在我的 ajax 调用执行之后?
    • 这里使用live() 意味着您可以毫无问题地将此代码插入您的$(document).ready() 块中。
    • 感谢马特,感谢您的帮助。我会尽快让你知道结果。
    猜你喜欢
    • 1970-01-01
    • 2010-10-18
    • 2019-09-30
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2013-01-14
    相关资源
    最近更新 更多