3

こんにちは、管理するアイテムの大きなテーブルがあります。使用するボタンをクリックすると

$.post("update_the_database.php", { mode: 'themode', username: username },
            function(result){
                window.location.href = window.location.href;
        });

これ"update_the_database.php"はバックグラウンドで実行され、終了するとページがリロードされます。トップページに戻りますが・・・

私はもう試した:

window.location.href = window.location.href + '#the_id';

ただし、すべてのブラウザー (IE、Firefox、Chrome、Safari) では、アドレス バーの URL が変更されますが、ページはリロードされません。

ここから:

window.location.href=window.location.href と window.location.reload() の違い

「window.location.href=window.location.href は、URL にアンカー (#) がある場合、ページをリロードしません。この場合、window.location.reload() を使用する必要があります。」

だから私は試しました:

window.location.reload(true);

ページをリロードし、Chrome と Safari では前の場所までスクロールしますが、IE と Firefox ではそうではありません...

URLで変更されたものがすべてハッシュである場合、ページを強制的にリロードする方法は?

アプローチ #2:

window.location.hash = "#" + newhash;
window.location.reload(true);

今ではFirefoxで動作します...

ところで、window.location.reload(true); を使用すると IEでは、次のようになります。

Windows Internet Explorer

To display the webpage again, the web browser needs to
resend the information you've previously submitted.

If you were making a purchase, you should click Cancel to
avoid a duplicate transaction. Otherwise, click Retry to display
the webpage again.

Retry   Cancel   

「再試行」を押す必要があります。そうしないと、「Web ページの有効期限が切れました」というエラー ページが表示されます。

現在行っているIEポップアップを回避するには:

                window.location.hash = "#<?php echo $id;?>";
                if (navigator.appName != 'Microsoft Internet Explorer') {
                    window.location.reload(true);
                }

ハッシュをアドレスバーに入れるだけで、アドレスバーに移動してEnterキーを押してもページが更新されません。ハッシュを削除し、Enter キーを押してページをリロードする必要があります... (その後、一番上までスクロールします)

4

3 に答える 3

1

'#id' を毎回 window.location.href に追加する代わりに、セコーディング時間 window.location.href には既に id が含まれており、それに別の id を追加します。window.location.href で正規表現 '/^(.*)#/is' を使用して、リロードする前に実際の URL を見つけます。今あなたが書いたロジックを使用してください

$.post("update_the_database.php", { mode: 'themode', username: username },
        function(result){
            var str = window.location.href;
            var patt1 = /^(.*)#/;
            window.location.href = patt1.exec(str)[1];
            window.location.href = window.location.href + '#the_id'
        }
}
于 2013-02-12T05:03:24.447 に答える
1

私が考えることができる唯一のハックは、によって示されるスクロール位置を保存し、window.scrollYそれを次のリクエストに渡すことです(例:クエリ文字列を使用)。次に、このキーが存在するかどうかを確認するコードを作成し、 を使用してその位置にジャンプしwindow.scrollTo(0, lastPos)ます。JavaScriptフレームワークを使用しない場合、見栄えが悪く、多くのコードが必要になります(そしてクエリ文字列が汚れます)。

データを定期的に更新するためにこれを行っている場合は、代わりに ajax 更新を行うようにコードを再設計する価値があるかもしれません。

于 2014-11-07T01:23:53.093 に答える