2012-07-30 13 views
6

Jestem obecnie za pomocą Code Igniter, aby mieć ładne adresy URL, i mam ten system, który zasadniczo wykorzystuje ajax, aby umożliwić Ci wyszukiwanie siłowni.Jak ponownie wczytać stronę po naciśnięciu przycisku BackState?

Im przy użyciu stan Push po liście siłownie załadowaniu tak:

example.com/list/search_key/pagination-page/sort-by/filters~seperated~by~that

Gdzie search_key to miasto, stan lub dzielnica w obszarze, w którym chcą przeszukiwać sale gimnastyczne, a filtry to pojedyncze pola wyboru.

Co się dzieje, to ja używam .ajax do wysyłania klucza wyszukiwania i każdej pojedynczej wartości pola wyboru (1 lub 0) przez pocztę, a następnie za pomocą kodu POST dane i PHP generują adres URL podobny do powyższego. Sukces ajaxowy określa, że ​​URL jest tym, który wygenerował PHP.

Problem polega na tym, że jeśli używasz paginacji, aby przejść do strony-2 i chcesz przejść do strony-1, naturalnie zamierzasz użyć przycisku wstecz przeglądarki. Problem polega na tym, że tylko przywiązuje pasek adresu URL do adresu URL przed aktualnym, ale nie zmienia zawartości stron. Potrzebuję go do przeładowania strony przy użyciu starego (poprzedniego) adresu URL lub odświeżenia lub czegoś podobnego.

Mogę nawet użyć ajax do ponownego wypełnienia formularza przy użyciu danych URL, ale nie mam pojęcia, jak to zrobić.

Próbowałem kilku rzeczy, ale nic nie działa. Prawie próbowałem wszystkiego na pierwszej stronie Google'a i wszystko wydaje się obiecujące, ale nic nie działa.

Czy mimo to istnieje możliwość odświeżenia strony, jeśli adres URL pliku Pushstate zmienia się w poprzedni adres URL?

PS Herezje niektóre z najważniejszych rzeczy Ive wypróbowany:

<script type="text/javascript"> 
$(window).unload(function(e){ 
    e.preventDefault(); 
    alert("Back was pressed!"); 
}); 
// If this wouldve worked, it wouldve atleast alerted me that. 

// The code off this URL: http://www.mrc-productivity.com/techblog/?p=1235 

// Some of the codes off this URL: http://forum.jquery.com/topic/howto-force-page-reload-refresh-of-previous-page-when-back-button-is-pressed 

// A few others. 
</script> 

Odpowiedz

14

Ponieważ pchają stanu z ajax metody sukcesu, można wykryć przycisk Wstecz stosując metodę window.onpopstate.

Należy pamiętać, że samo wywołanie funkcji history.pushState() lub history.replaceState() nie spowoduje zdarzenia typu popstate. Zdarzenie typu popstate jest wywoływane tylko przez działanie przeglądarki, takie jak kliknięcie przycisku wstecz (lub wywołanie funkcji history.back() w kodzie JavaScript).

var stateObj = { foo: "bar" }; 
history.pushState(stateObj, "page 2", "bar.html"); 

window.onpopstate = function(event) { 
    if(event && event.state) { 
     // event.state.foo 
    } 
} 
+0

Nadal nie rozumiem tej koncepcji. Rozumiem, że musisz wywołać funkcję onpopstate, ale powyższy kod działa tylko po naciśnięciu przycisku przesyłania dalej. Znalazłem tę stronę: http://stackoverflow.com/questions/7888711/page-not-reloading-via-back-when-using-pushstate-onpopstate Co jeśli pójdziesz do jego przykładu jsfiddle: http: // jsfiddle. net/pimvdb/CCgDn/1/Działa na niego, ale jeśli skopiuję/wkleję ten kod, to tylko ostrzeże "stan początkowy". Co ja robię źle? –

+1

Uwaga Mam właściwą rzecz do działania, ale dodanie location.reload(); gdzie umieścisz plik event.state.foo, który jest dokładnie tym, co chcę zrobić, ale muszę to zrobić po naciśnięciu przycisku wstecz. –

+1

Nieważne. Zły błąd operacji użytkownika. Lmao Dzięki za tonę. Doceniam pomoc. Działa idealnie z location.reload(); –

Powiązane problemy