【问题标题】:Site not refreshing after using Back Button使用后退按钮后网站不刷新
【发布时间】:2016-06-07 02:57:09
【问题描述】:

我想使用如下元标记:

<meta http-equiv="Pragma" CONTENT="no-cache">

会根据http://www.4guysfromrolla.com/webtech/111500-1.shtml自动刷新我的页面

但是我的页面没有刷新!

我正在做的是将复选框从具有活动列的数据库表动态加载到屏幕上,是否最初检查它,此外还有一个 onclick 事件处理程序,它在客户端采取行动(在另一个 div 标记中仅显示活动那些)。当我单击提交按钮时,操作将定向到另一个(经典)asp 页面并保存更改(活动状态)服务器端但是,当我单击浏览器中的后退按钮时,必须调用服务器端代码作为动态设置复选框具有正确的状态,但是当我切换复选框时调用的客户端与我留下的值不同,而是页面首次加载时的值,所以我认为自动刷新页面是通过没有缓存。我想这对 IE 不友好,或者我做错了什么。

请不要询问网址,因为它是一个内部网站。需要我发给你多少代码?

点击后退按钮后,下面的屏幕截图将非悬停和悬停状态合并为一张图片。为了解释这种情况,上图只显示了一个活跃的收件人。下图显示 2。 过程是: 在最初只有一个收件人后,我选择了另一个收件人。 我单击提交按钮。 它将第二个收件人保存到数据库中。 我单击浏览器上的后退按钮。 活动收件人列表仍然只显示一个用户。 如果我进入编辑模式(将鼠标悬停在我的绿色标签上),它会显示 2 个收件人。

这怎么可能?仅活动(非悬停)和完整列表都在服务器端加载!

【问题讨论】:

  • 试试这个 它在类似情况下对我有用
  • 试过它仍然不刷新,只有当我物理单击刷新时它才能正确呈现
  • 尝试正文 引号中没有任何内容
  • 这也不起作用
  • @DaveNorm document.refresh(); 已贬值,您现在应该使用 window.location.reload(true);。对它的唯一引用是Internet Explorer WebBrowserControl。任何现代浏览器都会返回 Object doesn't support property or method 'refresh',包括 IE Edge。

标签: html asp-classic internet-explorer-11


【解决方案1】:

我在这里阅读了很多关于堆栈溢出的帖子,主题是关于检测后退按钮的类似主题,我并不特别想让它变得复杂,因为这个代码看起来很复杂,但是,然后我想起了@DaveNorm 提到调用 document.refresh() 的事实,所以我决定调用我自己的客户端函数,该函数实际上可以更新 onload 事件中的活动状态并且它有效,所以我会继续这样做.

【讨论】:

  • 虽然document.refresh(); 可能在较旧的 IE 浏览器中工作,但您在前进时会遇到问题,我已经解释了为什么here
【解决方案2】:

该行不会自动刷新您的页面,它只是阻止 Internet 浏览器缓存内容,这将迫使它从 Web 服务器请求最新版本的页面。

我个人不喜欢使用客户端标签来处理缓存,更喜欢使用这样的函数在服务器端设置标头,我可以在 ASP 页面顶部调用。

<%
Sub no_cache()
  Dim Str: Str = "private, no-cache, must-revalidate" 
  Response.ExpiresAbsolute = DateAdd("yyyy", -5, Date())
  Response.AddHeader "pragma", "no-cache" 
  Response.AddHeader "cache-control", Str
End Sub
%>

然后我可以在我不想被 Internet 浏览器缓存的任何页面中使用一行从 #include 调用它。

<%
Call no_cache()
%>

【讨论】:

    猜你喜欢
    • 2015-08-06
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 2019-03-04
    相关资源
    最近更新 更多