【问题标题】:Internet Explorer Caching Ajax... Works Fine in Other BrowsersInternet Explorer 缓存 Ajax... 在其他浏览器中运行良好
【发布时间】:2013-09-23 21:39:19
【问题描述】:

问题: 我正在使用 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 Get 请求,但行为似乎是除非刷新会话,否则忽略 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();

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

【问题讨论】:

  • 嗨,David,我添加了一些基本代码,但由于一切都在其他浏览器中运行,并且在关闭 IE 中的缓存时也能正常运行,这似乎是 IE 和缓存 ajax 调用的一种时髦。跨度>
  • @cpaloa,我太累了。这里 2.35 - 也删除了我的愚蠢回答。对不起。
  • 不用担心,我们将不胜感激。我想出了答案,但由于我是新用户,我无法在发布问题后的 8 小时内回答我自己的问题。我明天将添加解决方案。事实证明这是一个简单的解决方案:不是让 jquery 在客户端添加时间戳,而是在服务器端添加时间戳。我认为我的问题有点冗长,难以理解。
  • 你也可以在.ajax()的基础上设置cache: false,这样你就可以设置一个调用使用cache: false,另一个调用缓存开启。
  • 感谢您的回复。这样做的问题是它仍然不会在页面上缓存结果。我希望缓存 ajax 请求,但是当我刷新页面或离开并返回时,我希望更新 ajax 请求。

标签: ajax jquery-ui jquery


【解决方案1】:

想通了!

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

$.ajaxSetup({cache:false});

或者html头

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

问题是这两者都完全使用了缓存。在我的情况下,我只想关闭 ajax 缓存,并且只在页面重新加载时,而不是在页面内。

$.ajaxSetup({cache:false});将时间戳添加到 ajax 获取 url。麻烦的是每次点击tab都会添加一个新的时间戳,让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 客户端时间戳。

【讨论】:

    猜你喜欢
    • 2012-02-07
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    相关资源
    最近更新 更多