2

我正在寻找一种在用户刷新页面时更改页面 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
}

谢谢

4

1 回答 1

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;您的代码部分,转而查看回发的数据。这意味着您不会在回发时不必要地两次加载页面,并允许您从任何更新的输入中访问数据。

于 2013-10-30T16:43:45.090 回答