【问题标题】:How to update page url on page refresh?如何在页面刷新时更新页面 url?
【发布时间】:2013-10-31 00:43:45
【问题描述】:

我正在寻找一种在用户刷新页面时更改页面 url(更改 url 键值之一)的方法。我这样做是为了反映页面内容的变化。我尝试了几种方法,但它们都有循环问题。以下是其中一种方法:

在我的html页面中:

<body onLoad="CheckPageLoad();">
    <input type="hidden" name="trial" id="trial" value="hello" />
</body>

在page.asp页面中:(脚本标签内

function CheckPageLoad() {
    if ($("#trial").val() == "hello") {
        // This is a fresh page load
        alert('Load');
        $("#trial").val("hi");
    } else {
        // This is a page refresh
        window.location = url;
        alert('Refresh');
    }
}

问题

  1. 每次刷新页面时,总是会显示加载警报。我以为负载只完成一次。看起来每次刷新页面时,它都会重新加载,因此该值始终保持为 hello。
  2. 我尝试只使用脚本标签,新的 url 被打开但一直循环。 (这是主要问题)

感谢任何更新上述方法或使用其他方法进行刷新的建议。以下是我也尝试过的其他方法:

window.onbeforeunload = unloadPage();

function unloadPage() {
    //do something
    //works but loops
}

谢谢

【问题讨论】:

  • window.location 触发页面刷新,因此您的 hello 变量被重置。您可以尝试使用会话来存储“你好”“想法”。
  • "好像每次刷新页面都会重新加载" 是的,就是这样。
  • 那么我该如何打开新的 url 并停止循环呢?它会打开新的 url,然后会打开另一个 url,这会一直持续下去。新的 url 是同一个页面,只是 url 中的一个键值发生了变化。示例:url1 aaaa.com/?element=1&pool=5 和 url2 是 aaaa.com/?element=1&pool=6
  • 这听起来像XY problem。如果您就您要解决的问题向我们提供一些背景信息,我们可能会提供更好的帮助。
  • @Silvermind - 你能举个例子吗

标签: c# javascript html jquery


【解决方案1】:

我将以下代码放入一个基本页面,它演示了为什么您会得到所描述的行为:

<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
        <script type="text/javascript">
            function CheckPageLoad() {
                if ($("#trial").val() == "hello") {
                    // This is a fresh page load
                    alert('Load');
                    $("#trial").val("hi");
                } else {
                    // This is a page refresh
                    alert('Refresh');
                    window.location = window.location + '?id=1';
                }
            }
        </script>
    </head>
    <body onLoad="CheckPageLoad();">
        <input type="hidden" name="trial" id="trial" value="hello" />
    </body>
</html>

当您设置 window.location 时,它会更改 url(好吧!),这意味着您正在加载一个新页面。刷新页面时,您会在“加载”之前收到“刷新”警报。这表明页面首先回发,但 onload 事件导致页面导航到另一个位置,因此再次加载它。据我了解,更新 URL 中的任何内容最终都是一个新的请求/新加载的页面。

您可能会发现以下关于 asp 中的视图状态的有用信息(正如您建议的那样,您使用的是 asp 页面):http://msdn.microsoft.com/en-us/library/ms972976.aspx

我的建议是完全删除代码中的window.location = url; 部分,转而查看回发的数据。这意味着您不会在回发时不必要地两次加载页面,并允许您从任何更新的输入中访问数据。

【讨论】:

  • 感谢您的详细回复。我正在检查您建议的链接。如果我删除window.location=url2,你还有什么建议打开url2。
  • 谁能帮我解决这个问题。警报仅用于调试。每次刷新页面时始终显示加载警报。刷新警报不起作用。貌似每次刷新页面,值都保持hello。???
  • 如果您将上述代码保存为 html 文件,您会发现刷新警报实际上已显示,在您的代码中,您在运行它之前离开页面。如上所述,为 window.location 分配一个新值将导致页面重新加载而不是刷新。为什么需要在回发时更改 URL?
  • 即打开一个新的 url - 新的 url 与旧的 url 几乎相同,只是旧的 url 键之一在新的 url 中获得了新的值。
  • 那么你每次都会加载,window.location的设置意味着你正在加载一个新页面(加载新的url)而不是刷新页面。您应该做的不是依赖隐藏字段来确定是否已回发某些内容,因为每次导航到页面时都会像新的一样加载此隐藏字段(未回发到)。
猜你喜欢
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 2018-03-31
  • 2020-06-23
  • 2014-03-09
  • 2011-06-05
  • 2013-02-11
  • 2013-03-20
相关资源
最近更新 更多