2

次のように、ページを離れるときにユーザーに確認メッセージを表示するために jQuery を使用しています。

var changes = false;  

window.onunload =function() { 
    if (changes) {
        $.post("check.php",{undovideokey:VID});
    } else return null; 
};

一方で

<input type='submit' name='Add' value='submit ' align='right' onclick="changes = true;" /> 

ページを更新するときに Google Chrome でコードを実行すると問題が発生します。このような問題を数多く見てきましたが、役立つ答えはありません。

手動更新でページを取得した後に発生する onunload ハンドラーでの jQuery ajax 呼び出し。onunload が最初に発生することを保証するにはどうすればよいですか?

Chrome での window.onbeforeunload ajax リクエスト

ありがとう、サラ

4

2 に答える 2

2

私の理解が正しければ、ページが更新された後に AJAX リクエストが発生するという問題です。

イベントでトリガーするようにコードを変更onbeforeunloadし、同期 AJAX 要求を使用すると、問題が解決するはずです。

var changes = false;

window.onbeforeunload = function() {
    if (changes) {
        $.ajax({
            async: false,
            url: "check.php",
            data: {
                undovideokey: 'foo'
            }
        });
    } else {
        return null;
    };
};

これは Chrome の開発者ツールではわかりにくいことに注意してください。これは、リロード間で AJAX 要求が保持されないためです。サーバー側で、またはFiddlerなどのツールを使用して、動作を確認する必要があります。

実際のデモ: http://jsfiddle.net/wq4hk/4/show ( http://jsfiddle.net/wq4hk/4/で編集可能)

于 2011-04-26T21:21:46.580 に答える
1

「更新」ボタンをクリックするか、F5を押すたびに(またはMacの場合は何でも)、ブラウザがJavaScriptの状態をある程度維持しようとすることに気付きました。開発しているときは、新鮮な状態から始めたいので、本当に面倒な機能です。これはばかげているように思えるかもしれませんが、新しい状態を強制するために私が行うことは、アドレス ボックスにカーソルを置いて Enter キーを押すことです。その後、Chrome は新しいセッションを開始するときにそれを処理し、JavaScript の状態を保持しません。クリーンな状態と新しいイベントを持つことに依存するコードで F5 を押すだけで、多くの風変わりな動作に遭遇しました。

于 2011-04-26T21:13:37.767 に答える