Mam stronę, na której znajduje się kilka przycisków wyszukiwania/filtrowania, które po kliknięciu odświeżają zawartość listy poniżej poprzez AJAX .Interfejs API historii HTML5: JSON wyświetlany po przejściu "wstecz" na inną stronę, a następnie "do przodu" ponownie
W trakcie tej operacji modyfikuję historię (poprzez pstrykanie), aby nowa, odfiltrowana strona była księgowa, a więc działa przycisk Wstecz. Słucham także imprezy popstate, aby zareagować na Back.
Mój kod wygląda mniej więcej tak:
window.addEventListener("popstate", function(ev) {
if (!window.history_ready) { return; } // Avoid the one time it runs on load
refreshFilter(window.location.href, true);
});
refreshFilter: function(newURL, backButtonPressed){
$.ajax({ url: newURL}).done(blah);
if (!backButtonPressed) {
window.history_ready = true;
history.pushState(null, null, newURL);
}
}
Działa to doskonale, z wyjątkiem jednego przypadku, dziwne ...
- Użytkownik nie jest w stronie "A"
- one kliknij link do tej strony, która bawi się historią (nazwijmy ją "B")
- Uruchomiono kilka filtrów, a następnie kilka razy wciśnij Wróć, aby przywrócić początkowy stan "B"
- Ponownie kliknij przycisk Wstecz, który odsyła ich ponownie do "A"
- W tym momencie, jeśli naciśnie przycisk Przekaż dalej, zamiast ponownie przesłać żądanie do serwera w przypadku strony "B", przeglądarka wyświetla tylko kilka kod JSON jako zawartości strony (ten JSON jest odpowiedź jednego z moich żądań AJAX filtrować rzeczy)
przynajmniej w najnowszy Chrome
Dlaczego tak się dzieje i jak można go uniknąć?
Próbowałem domniemanej rozwiązanie - zmienił URL pobranego przez AJAX nieznacznie (poprzez dodanie zupełnie ignorowane '& ajax = 1 'do ciąg zapytania) - i zadziałało! :) – Ashe
Warto wyczyścić pamięć podręczną Chrome podczas wypróbowywania tego rozwiązania. Wygląda na to, że Chrome nadal nie działa po wypróbowaniu tego, ponieważ buforował stary wynik. – jonnybot
@jonnybot Dzięki, myślałem, że poprawka działa dla wszystkich innych, ale dla mnie, ale po wyczyszczeniu pamięci podręcznej zaczęło działać i błąd już nie istnieje. – sandre89