JQuery-ui tabs (ajax).... перезагружать URL-адрес заставки при повторной настройке табуляции
Я использую jquery ui tabs и im, добавляя вкладки динамически, используя .tabs('add'...). Вкладки загружают URL-адрес с помощью ajax. Проблема в том, что каждый раз я нажимаю на другую вкладку, а потом возвращаюсь... вкладка перезагружает URL. я хочу, чтобы url загружался один раз... любые идеи?
Ответы
Ответ 1
Я думаю, что вы ищете параметр cache
(по умолчанию это false
):
Можно ли кэшировать удаленные вкладки содержание, например. нагрузка только один раз или с каждый клик.
Например:
$("#tabs").tabs({ cache:true });
Вот простая демонстрация. Используйте Firebug или другой инструмент, чтобы убедиться, что контент не извлекается более одного раза за вкладку: http://jsfiddle.net/andrewwhitaker/D6qkW/
Ответ 2
Обратите внимание, что свойство 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 );
});
}
});
Ответ 3
Включите кеширование на вкладках или, альтернативно, включите параметр кеша globabl ajax в jQuery, когда что-то изменится, что требует перезагрузки, динамически добавьте что-то вроде 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 );
Ответ 4
Используйте переменную для хранения логического значения. Первоначально установлено значение false (ajax не загружен). Когда ваши нагрузки ajax устанавливают значение boolean в true и проверяют значение перед каждым запросом ajax.
Конечно, вам нужно будет немного поработать над несколькими вкладками.
Ответ 5
$(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.");
});
}
});
});
Ответ 6
По состоянию на 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);
}
});
Ответ 7
Обменивайте вызовы 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
}
});
}
Ответ 8
Я нашел решение для той же проблемы, вот отличный ответ и, пожалуйста, предпочитайте ссылку ниже:
$( "#tabs" ).tabs({
beforeLoad: function( event, ui ) {
if ( ui.tab.data( "loaded" ) ) {
event.preventDefault();
return;
}
ui.jqXHR.success(function() {
ui.tab.data( "loaded", true );
});
}
});
Устаревшие параметры ajaxOptions и кеша добавлены в событие beforeLoad