Jquery-ui 选项卡(ajax)....重新选择选项卡时停止选项卡重新加载 url

发布于 2024-10-18 14:50:02 字数 127 浏览 5 评论 0原文

我正在使用 jquery ui 选项卡,并使用 .tabs('add'...) 动态添加选项卡。选项卡使用 ajax 加载 url。问题是,每次我单击另一个选项卡然后返回...该选项卡都会重新加载网址。我希望网址加载一次...有什么想法吗?

I am using jquery ui tabs and im adding tabs dynamically using .tabs('add'...). The tabs load a url using ajax. The problem is that everytime i click on another tab then come back... the tab reloads the url. i want the url loaded once.... any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

远山浅 2024-10-25 14:50:02

请注意,选项卡选项的 cache 属性在 jQueryUI 1.9 中已弃用,并在 1.10 中删除。请参阅 jQueryUI 1.9 升级指南

推荐方式现在要处理这个问题,是使用新的 beforeLoad 事件来阻止 XHR 请求运行。

$( "#tabs" ).tabs({
  beforeLoad: function( event, ui ) {
    if ( ui.tab.data( "loaded" ) ) {
      event.preventDefault();
      return;
    }

    ui.jqXHR.success(function() {
      ui.tab.data( "loaded", true );
    });
  }
});

Please note that the cache property of the tabs options was deprecated in jQueryUI 1.9 and removed in 1.10. See the jQueryUI 1.9 upgrade guide

The recommended way to handle this now, is to use the new beforeLoad event to prevent the XHR request from running.

$( "#tabs" ).tabs({
  beforeLoad: function( event, ui ) {
    if ( ui.tab.data( "loaded" ) ) {
      event.preventDefault();
      return;
    }

    ui.jqXHR.success(function() {
      ui.tab.data( "loaded", true );
    });
  }
});
苍景流年 2024-10-25 14:50:02

我认为您正在寻找 cache 选项(默认为false):

是否缓存远程选项卡
内容,例如仅加载一次或使用
每次点击。

例如:

$("#tabs").tabs({ cache:true });

这是一个简单的演示。使用 Firebug 或其他工具确保每个选项卡不会多次检索内容:http:// jsfiddle.net/andrewwhitaker/D6qkW/

I think you're looking for the cache option (this defaults to false):

Whether or not to cache remote tabs
content, e.g. load only once or with
every click.

For example:

$("#tabs").tabs({ cache:true });

Here's a simple demo. Use Firebug or another tool to make sure that the content isn't being retrieved more than once per tab: http://jsfiddle.net/andrewwhitaker/D6qkW/

晚雾 2024-10-25 14:50:02

打开选项卡上的缓存,或者启用 jQuery 中的全局 ajax 缓存选项,当某些更改需要重新加载时,动态地将 Math.Rand() 之类的内容附加到 URL 末尾,这样就不会缓存下一个加载。

来自选项卡缓存的 jQuery 站点:


Code examples Initialize a tabs with the cache option specified. $( ".selector" ).tabs({ cache: true }); Get or set the cache option, after init. //getter
var cache = $( ".selector" ).tabs( "option", "cache" );
//setter
$( ".selector" ).tabs( "option", "cache", true );

Turn on caching on the tabs, or alternatively enable the globabl ajax cache option in jQuery, when something changes that requires a reload, dynamically append something like Math.Rand() to the end of the URL so that it won't cache the next load.

From the jQuery site for tab caching:


Code examples Initialize a tabs with the cache option specified. $( ".selector" ).tabs({ cache: true }); Get or set the cache option, after init. //getter
var cache = $( ".selector" ).tabs( "option", "cache" );
//setter
$( ".selector" ).tabs( "option", "cache", true );

一绘本一梦想 2024-10-25 14:50:02

使用变量来存储布尔值。最初设置为 false(ajax 未加载)。当您的 ajax 加载时,将布尔值设置为 true 并在每个 ajax 请求之前检查该值。

当然,您需要做更多的工作来处理多个选项卡。

Use a variable to store a boolean value. Initially set at false(ajax not loaded). When your ajax loads set the boolean to true and check the value before each ajax request.

Of course you would need to do a little more work to handle more than one tab.

姜生凉生 2024-10-25 14:50:02
$(function () {
        $("#tabs").tabs({
            beforeLoad: function (event, ui) {
                if (ui.tab.data("loaded")) {
                    event.preventDefault();
                    return;
                }
                ui.ajaxSettings.cache = false,
                ui.panel.html('<img src="images/prettyPhoto/dark_square/loader.gif" width="24" height="24" style="vertical-align:middle;"> Loading...'),
                ui.jqXHR.success(function() {
                    ui.tab.data( "loaded", true );
                }),
                ui.jqXHR.error(function () {
                    ui.panel.html(
                    "Couldn't load Data. Plz Reload Page or Try Again Later.");
                });
            }
        });
    });
$(function () {
        $("#tabs").tabs({
            beforeLoad: function (event, ui) {
                if (ui.tab.data("loaded")) {
                    event.preventDefault();
                    return;
                }
                ui.ajaxSettings.cache = false,
                ui.panel.html('<img src="images/prettyPhoto/dark_square/loader.gif" width="24" height="24" style="vertical-align:middle;"> Loading...'),
                ui.jqXHR.success(function() {
                    ui.tab.data( "loaded", true );
                }),
                ui.jqXHR.error(function () {
                    ui.panel.html(
                    "Couldn't load Data. Plz Reload Page or Try Again Later.");
                });
            }
        });
    });
糖粟与秋泊 2024-10-25 14:50:02

从 jQuery 3.0 开始,jqXHR.success 被删除,解决方案(上面的 CheekySoft 修改形式)现在是

$('#tabs').tabs({
  beforeLoad: function(event,ui){
    if(ui.tab.data("loaded")){
      event.preventDefault();
      return;
    }
  },
  load: function(event,ui){
    ui.tab.data("loaded",true);
  }
});

As of jQuery 3.0 jqXHR.success was removed, solution (modified form CheekySoft above) is now

$('#tabs').tabs({
  beforeLoad: function(event,ui){
    if(ui.tab.data("loaded")){
      event.preventDefault();
      return;
    }
  },
  load: function(event,ui){
    ui.tab.data("loaded",true);
  }
});
浴红衣 2024-10-25 14:50:02

将 AJAX 调用包装在 if 语句中,该语句检查先前的 AJAX 调用,即:

var ajaxed = false

if ( ajaxed == false ) {
    // your ajax call
   $.ajax({
       type: "GET",
       url: "test.js",
       dataType: "html"
       success: function(data){
          // insert html into DOM
          ajaxed = true
       }
   });
}

Wrap your AJAX calls within an if statement which checks for a previous AJAX call, i.e.:

var ajaxed = false

if ( ajaxed == false ) {
    // your ajax call
   $.ajax({
       type: "GET",
       url: "test.js",
       dataType: "html"
       success: function(data){
          // insert html into DOM
          ajaxed = true
       }
   });
}
轻许诺言 2024-10-25 14:50:02

我在这里找到了相同问题的解决方案,这是完美的答案,请更喜欢下面的链接:

 $( "#tabs" ).tabs({
beforeLoad: function( event, ui ) {
    if ( ui.tab.data( "loaded" ) ) {
        event.preventDefault();
        return;
    }

    ui.jqXHR.success(function() {
        ui.tab.data( "loaded", true );
    });
}

});

已弃用的 ajaxOptions 和在Load 事件之前添加的缓存选项

I found the solution for the same problem here is the perfect answer and please prefer the link below:

 $( "#tabs" ).tabs({
beforeLoad: function( event, ui ) {
    if ( ui.tab.data( "loaded" ) ) {
        event.preventDefault();
        return;
    }

    ui.jqXHR.success(function() {
        ui.tab.data( "loaded", true );
    });
}

});

Deprecated ajaxOptions and cache options added beforeLoad event

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文