Domanda

Sto cercando di creare un sito completamente Ajax di supporto, ma sto avendo difficoltà a capire come supportare la cronologia.Sto usando http://balupton.github.com/jquery-history/demo/ Come la mia hash cambia la libreria con jQuery come tale:

$(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);
});
.

Sto anche usando il seguente JavaScript per Bookmarking:

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

Tuttavia con i due frammenti sopra i due snippet che trovo che il pulsante posteriore non funziona, specialmente con i moduli inviati.Se aggiungo il seguente codice mi dà solo le pagine predefinite che non hanno informazioni inviate come non ho mai inviato il modulo in primo luogo.

window.onhashchange = hash_process;
.

C'è un modo in cui posso controllare se è stato chiamato il pulsante Indietro?Qualsiasi idea sarebbe apprezzata, grazie!

È stato utile?

Soluzione

Ho trovato la risposta a questo enigma.Poiché la seconda chiamata è stata causata dopo aver inviato le forme che ho finito per aggiungere solo una variabile di aggiunta nel mix come segue:

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

nelle funzioni che sono state avviate prima del controllo ho aggiunto quella variabile nell'esecuzione:

$(document).on('click','a',function(){
    var url = $(this).attr('href');
    $.ajax({
        // AJAX Call & Populate
    });
    $.History.go(url);
    ignore_hash = true;
    return false;
});
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top