如何在页面刷新时更新页面URL?

时间:2013-10-30 14:58:29

标签: c# javascript html jquery

我正在寻找一种方法来在用户刷新页面时更改页面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. 我尝试仅使用脚本标记并打开新网址但保持循环。 (这是主要问题)
  3. 任何有关更新上述方法或使用其他方法进行刷新的建议都表示赞赏。以下是我也尝试过的其他方法:

    window.onbeforeunload = unloadPage();
    
    function unloadPage() {
        //do something
        //works but loops
    }
    

    由于

1 个答案:

答案 0 :(得分: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(well duh!),这意味着你正在加载一个新页面。刷新页面后,您会在“加载”之前收到“刷新”警报。这表明页面首先发布,但onload事件导致页面导航到另一个位置,因此再次加载。我的理解是,更新URL中的任何内容最终都是新请求/新加载的页面。

您可能会发现以下对于asp中的viewstate有用(看到您建议使用的是asp页面):http://msdn.microsoft.com/en-us/library/ms972976.aspx

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