如何阻止IE7-8缓存此jQuery函数的显示?

时间:2011-05-13 16:25:08

标签: jquery internet-explorer

每次在jQuery Tabs UI中更改选项卡时,我都会使用下面的函数在#quotescontainer中显示随机引用。除了IE7-8(当然)以外的所有功能都可以正常工作。

IE7-8中发生的情况是显示第一个引号,第二个随机引用出现在第一个引号正下方的#quotescontainer中。在所有其他浏览器中,只显示一个引号,并在选项卡更改时轮换。所以IE从quotes.html抓取div.quote中的第一个引号,显示它并在第一个引号下面显示随机引用。

我可以尝试强制IE正确交换引号吗?并没有被第一次引用“卡住”?

这是缓存问题吗?或者函数的问题总是读取quote1并在其下面附加quote2?

我没有在.htaccess中使用缓存。我尝试在函数中添加$.ajaxSetup({cache: false});但没有运气。

6/01/11 fix; 问题是quotes.html中<div class="quote">quote text</div>内的一些html。不知何故,这打破了IE7-8。

jsfiddle: http://jsfiddle.net/YAEe5/28/

我的职能: 在Matthew Ratzloff的帮助下

    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>

5 个答案:

答案 0 :(得分:8)

这是一个完整的,经过测试的工作示例,说明了您的目标。您应该能够将$(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>

答案 1 :(得分:1)

如果no-cache或其他缓存选项不起作用,您可以尝试

$('div#quotescontainer').html('')

之后调用你的函数并加载

$('div#quotescontainer').load('http://mydomain.com/quotes.html',function

答案 2 :(得分:0)

在该网址末尾附加一个随机数:http://mydomain.com/quotes.html?rand=439786

它会阻止您的浏览器缓存它。

答案 3 :(得分:0)

这是代码问题,而不是浏览器问题。

您的代码不需要数据缓存。所以,停止使用它。要从代码中执行此操作,只需停止使用HTTP GET命令(由.load()函数使用)。加载你的html,json,脚本或你的网址mydomain.com/quotes.html的任何数据?使用HTTP POST命令发送回全局$ .post()函数。发布数据不会被缓存。您可以在页面的加载事件中执行此操作,方法是将返回的数据分配给全局变量,然后将其发送到div元素。或类似的东西。

或者从您的客户端解决它,打开IE的Internet选项。在浏览历史记录部分(我现在正在使用IE9)单击按钮设置。在对话框中,选择“每次访问页面时”而不是默认“自动”。然后清除浏览器的缓存(Ctrl + Shift + Delete)并重新加载页面。

答案 4 :(得分:0)

每次切换标签时,是否必须从quotes.html加载所有引号?我会在docuemnt ready上加载引号'make all隐藏,只在选项卡上执行选择。示例代码:http://jsfiddle.net/YAEe5/40/

在IE8和compat模式下测试似乎有效。