Internet Explorer缓存Ajax ...在其他浏览器中运行良好

时间:2013-09-18 23:20:31

标签: ajax jquery-ui jquery

问题: 我正在使用Jquery UI选项卡。选项卡显示存储在数据库中的数据。让我们说这些标签在home.com上。为了编辑数据库中的数据,您将进入一个新页面,您可以在其中编辑数据(例如home.com/edit)。返回home.com后,应显示新数据。这是google chrome和firefox中的情况,但不适用于Internet Explorer。

古怪: 我可以设置$ .ajaxSetup({cache:false});现在重新加载数据。这让我觉得这是Internet Explorer的ajax问题(忽略获取请求)。麻烦的是我不希望将缓存设置为false。我只希望在单击选项卡时加载选项卡一次(样式,javascript,数据等不需要重新加载。)。即,只有当您转到其他页面然后返回时才会重新加载选项卡,而不是每次单击选项卡时都会重新加载。

此外,当所有IE窗口关闭,然后导航回home.com时,将显示更新的数据。数据正在网站上刷新,但不会在进行ajax调用的页面上刷新。看起来行为应该是ajax获取请求应该被忽略,除非整个页面被刷新,但行为似乎是ajax Get请求被忽略,除非会话被刷新。

希望这是有道理的。 非常感谢任何帮助!

以下是代码的示例: HTML:

<div id='tabs'>
<ul>
<li><a href='Home.php?viewIsActive=true&tab=true'> Active </a></li>
<li><a href='Home.php?listAll=true&tab=true'> List All </a></li>
</ul>
</div>

使用Javascript:

$("#tabs").tabs();

在标签之间切换应该缓存,但重新加载页面也应该重新加载标签。

1 个答案:

答案 0 :(得分:2)

弄清楚了!

那里的大多数信息都说使用Jquery:

$.ajaxSetup({cache:false});

或html标题

<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">

问题在于,这两者都可以完全缓存。在我的情况下,我只想关闭ajax,只在页面重新加载,而不是在页面内。

$ ajaxSetup({缓存:假})。将为ajax get url添加时间戳。麻烦的是,每次单击选项卡时,都会添加一个新的时间戳,使IE认为它是一个新的URL,并重新加载所有信息。

解决方案: 将时间戳添加到服务器端。这样,每次重新加载页面并联系服务器时,都会有一个新的时间戳。但是当你在客户端点击时,IE不重新加载url,因为它是相同的,只有页面上的更改重新加载/导航和返回。

PHP:

$time = time();
$tabs = "<div id='tabs'>
<ul>
<li><a href='Home.php?viewIsActive=true&tab=true&timeStamp=" . $time . "'> Active </a></li>
<li><a href='Home.php?listAll=true&tab=true&timeStamp=" . $time . "'> List All </a>    </li>
</ul>
</div>"

因此,对于每页刷新/导航只需要加载一次的ajax请求,请使用服务器端时间戳,对于您从不想要缓存的ajax请求,请使用jquery客户端时间戳。