JQuery-UI tabs (ajax) ... остановка перезагрузки вкладки url при повторном выборе вкладки
Я использую вкладки jQuery ui и IM, динамически добавляя вкладки .вкладки ("добавить"...). Вкладки загружают url-адрес с помощью ajax. Проблема в том, что каждый раз, когда я нажимаю на другую вкладку, потом вернулся... вкладка перезагружает url-адрес. я хочу, чтобы url-адрес был загружен один раз.... есть идеи?
8 ответов
Я думаю, вы ищете cache
(по умолчанию это false
):
кэшировать удаленные вкладки или нет содержание, например нагрузка только раз или с каждый клик.
например:
$("#tabs").tabs({ cache:true });
вот простая демонстрация. Используйте Firebug или другой инструмент, чтобы убедиться, что содержимое не извлекается более одного раза на вкладке:http://jsfiddle.net/andrewwhitaker/D6qkW/
обратите внимание: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 );
});
}
});
включите кэширование на вкладках или включите опцию кэша 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 );
используйте переменную для хранения логического значения. Первоначально установлено значение false (ajax не загружен). При загрузке ajax установите логическое значение true и проверьте значение перед каждым запросом ajax.
конечно, вам нужно будет сделать немного больше работы, чтобы обработать более одной вкладки.
$(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.");
});
}
});
});
начиная с jQuery 3.0 jqXHR.успех был удален, решение (измененная форма CheekySoft выше) теперь
$('#tabs').tabs({
beforeLoad: function(event,ui){
if(ui.tab.data("loaded")){
event.preventDefault();
return;
}
},
load: function(event,ui){
ui.tab.data("loaded",true);
}
});
оберните вызовы 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
}
});
}
Я нашел решение для той же проблемы вот и пожалуйста, ссылку ниже:
$( "#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 event