Как я могу остановить IE7-8 от кеширования отображения этой функции jQuery?
Я использую функцию ниже, чтобы показать случайную цитату в #quotescontainer каждый раз, когда изменяется вкладка в пользовательском интерфейсе jQuery Tabs. Хорошо работает во всем, кроме IE7-8 (конечно).
Что происходит в IE7-8, отображается первая цитата, а вторая, случайная цитата появляется в #quotescontainer прямо под первой цитатой. Во всех других браузерах отображается только одна цитата, и она вращается при изменении вкладок. Таким образом, IE захватывает первую цитату в div.quote из quotes.html, показывая ее, а также показывая случайную цитату под первой цитатой.
Что я могу попытаться заставить IE правильно поменять кавычки? И не зацикливаться на первой цитате?
Является ли это прооблем кэша? Или проблема с функцией всегда читает quote1 и добавляет quote2 под ней?
Я не использую кеширование в .htaccess. Я попытался добавить $.ajaxSetup({cache: false});
в функцию без везения.
6/01/11 fix; проблема заключалась в некотором html внутри <div class="quote">quote text</div>
в quotes.html. Так или иначе, это ломало IE7-8.
jsfiddle: http://jsfiddle.net/YAEe5/28/
Моя функция: с помощью Мэтью Рацлоффа ниже
select: function(event, ui) {
var random = Math.floor(Math.random() * (Math.pow(2, 32) - 1));
$('div#quotescontainer').load('http://mydomain.com/quotes.html?' + random, function() {
var quotes = $(this).find('div.quote');
var index = Math.floor(Math.random() * quotes.length);
quotes.hide().eq(index).fadeIn();
});
кавычки отображаются на странице #quotescontainer
quotes.html содержит следующее:
<div class="quote">Quote1</div>
<div class="quote">Quote2</div>
<div class="quote">Quote3</div>
Ответы
Ответ 1
Это полный, проверенный, рабочий пример того, что вы хотите сделать. Вы должны убрать все внутри функции $(document).ready
в свой обработчик select
.
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
</head>
<script>
$(document).ready(function() {
var random = Math.floor(Math.random() * (Math.pow(2, 32) - 1));
$('div#quotescontainer').load('quotes.html?' + random, function() {
var quotes = $(this).find('div.quote');
var index = Math.floor(Math.random() * quotes.length);
quotes.hide().eq(index).fadeIn();
});
});
</script>
<div id="quotescontainer"></div>
</html>
Ответ 2
Если no-cache
или другие параметры кеширования не работают, вы можете попробовать
$('div#quotescontainer').html('')
после этого вызова ваша функция и загрузка
$('div#quotescontainer').load('http://mydomain.com/quotes.html',function
Ответ 3
Это проблема с кодом, а не проблема с браузером.
Вам не нужен кеширование данных. Поэтому прекратите использовать его. Чтобы сделать это из вашего кода, просто прекратите использовать команду HTTP GET (которая используется функцией .load()). Загрузите html, json, script или какие-либо данные вашего URL mydomain.com/quotes.html? отправляет обратно с глобальной функцией $.post(), которая использует команду HTTP POST. Почтовые данные не кэшируются. Вы можете сделать это в событии загрузки страницы, назначив возвращаемые данные глобальному var и затем отправив его в ваш элемент div. Или что-то в этом роде.
Или, чтобы решить это с вашего клиента, откройте Internet Options IE. В разделе История просмотра (я использую IE9 прямо сейчас) нажмите кнопку "Настройки". В диалоговом окне выберите "Каждый раз, когда я посещаю страницу", а не по умолчанию "Автоматически". Затем очистите кеш браузера (Ctrl + Shift + Delete) и перезагрузите страницу.
Ответ 4
Добавить случайное число в конец этого URL-адреса: http://mydomain.com/quotes.html?rand=439786
Это позволит вашему браузеру кэшировать его.
Ответ 5
Вам нужно загружать все кавычки из quotes.html каждый раз, когда вы переключаете вкладку? Я бы загрузил кавычки на готовом документе, сделав все скрытым и выполнив только выбор на вкладке. Пример кода здесь: http://jsfiddle.net/YAEe5/40/
Проверено на IE8 и в режиме совместимости, похоже, работает.