2

ユーザーがページを更新したときにページの URL を変更する (URL キーの値の 1 つを変更する) 方法を探しています。ページの内容の変更を反映するためにこれを行っています。いくつかの方法を試しましたが、すべてループの問題があります。以下に方法の 1 つを示します。

私の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. script タグのみを使用してみましたが、新しい URL が開かれますが、ループし続けます。(これが一番の問題)

上記の方法を更新するか、別の方法を使用して更新を行うための提案は大歓迎です。以下は、私も試した他の方法です。

window.onbeforeunload = unloadPage();

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

ありがとう

4

1 に答える 1

1

I put the following code into a basic page and it demonstrates why you are getting the described behaviour:

<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>

When you set the window.location it changes the url (well duh!) which therefore means you are loading a new page. When the page is refreshed you get a "Refresh" alert before a "Load". This demonstrates that the page is posting back first, but the onload event causes the page to navigate to another location, therefore loading it again. It is my understanding that updating anything in the URL ultimately is a new request/newly loaded page.

You might find the following useful regarding the viewstate in asp (seeing as you suggested you are using an asp page): http://msdn.microsoft.com/en-us/library/ms972976.aspx

My suggestion would be to completely remove the window.location = url; part of your code in favour of looking at the data which was posted back instead. This means that you aren't unnecessarily loading the page twice on postback and allows you to access the data from any updated inputs.

于 2013-10-30T16:43:45.090 に答える