【发布时间】:2010-04-17 19:52:51
【问题描述】:
出于问题的目的,我需要创建一个简单的虚构场景。
我有以下带有一个链接的简单页面,称之为页面 A:
<a class="red-anchor" onclick="change_color(event);" href="http://mysite.com/b/">B</a>
使用相关的 Javascript 函数:
function change_color(e)
{
var event = e || window.event;
var link = event.target;
link.className = "green-anchor";
}
我有适当的 CSS 来根据类名将锚点设为红色或绿色。
这是有效的。也就是说,当我单击锚点时,它会将颜色从红色变为绿色,这在浏览器加载页面 B 之前短暂可见。
但如果我随后使用 BACK 按钮返回到页面 A,我会在不同的浏览器中得到不同的行为。
- 在 Safari 中,锚点仍为绿色(所需行为)
- 在 Firefox 中它恢复为红色
我想 Safari 正在以某种方式更新其页面的缓存版本,而 Firefox 则没有。
所以我的第一个问题是:有什么方法可以让 FF 更新缓存的页面,还是这里发生了其他事情?
其次:我有一个不同的实现,我使用 ajax 调用。在此我使用会话变量设置锚的类,例如...
<a class="<?php echo $_SESSION["color"]; ?>" ...[snip]... >B</a>
并且 javascript 函数会进行额外的 ajax 调用,从而更改“颜色”会话变量。
在这种情况下,Safari 和 Firefox 都可以正常工作。从 B 回到 A 时,颜色仍然是绿色。但我一生都无法弄清楚为什么它应该与非 ajax 案例不同。我已经尝试了许多不同的排列,为了让它在 FF 上工作,“颜色”会话变量必须改变(即 ajax 调用本身并没有以某种方式重新加载缓存)。但是在返回时,页面正在从缓存中重新加载(在 Firebug 中验证),那么如果页面没有重新处理页面并在锚点中运行该 php 片段,那么页面如何访问这个会话变量?
我认为这里一定有一些我不理解的基本内容。任何见解将不胜感激。
【问题讨论】:
标签: ajax browser-cache