1

Ajax を完全にサポートするサイトを作成しようとしていますが、履歴をサポートする方法を理解するのに苦労しています。私はhttp://balupton.github.com/jquery-history/demo/をjqueryを使用したハッシュ変更ライブラリとして使用しています:

$(document).on('click','a',function(){
    var url = $(this).attr('href');
    $.ajax({
        // AJAX Call and populate
    });
    $.History.go(url);
    return false;
});
$('input[type="submit"]').livequery('click',function(event){
    $(this).closest("form").ajaxForm(get_pages_load_options);
    var url = $(this).closest("form").attr('action');
    $.History.go(url);
});
$('.get_pages').livequery('change',function(){
    $(this).closest("form").ajaxForm(get_pages_load_options);
    var url = $(this).closest("form").attr('action');
    $.History.go(url);
});

また、ブックマークに次の JavaScript を使用しています。

function hash_process() {
    url = window.location.hash.replace('#', '');
    $.ajax({
        //AJAX Call and Populate
    });
}
if (window.location.hash) {
    hash_process();
}

ただし、上記の 2 つのスニペットでは、特に送信されたフォームでは、戻るボタンが機能しないことがわかりました。次のコードを追加すると、最初にフォームを送信したことがないように、送信された情報がないデフォルトのページが表示されます。

window.onhashchange = hash_process;

戻るボタンが呼び出されたかどうかを確認する方法はありますか? どんなアイデアでも大歓迎です、ありがとう!

4

1 に答える 1

1

この難問に対する答えを見つけました。フォームを送信した後に 2 番目の呼び出しが発生したため、次のように追加変数をミックスに追加するだけになりました。

ignore_hash = false;
function hash_process() {
    if (ignore_hash == false) {
        url = window.location.hash.replace('#', '');
        $.ajax({
            // AJAX Call & Populate
        });
    } else {
        ignore_hash = false;
    }
}

チェックの前に開始された関数で、その変数を実行に追加しました。

$(document).on('click','a',function(){
    var url = $(this).attr('href');
    $.ajax({
        // AJAX Call & Populate
    });
    $.History.go(url);
    ignore_hash = true;
    return false;
});
于 2012-10-01T01:30:28.680 に答える