Jestem trochę zdezorientowany, w jaki sposób History.js działa na ładowanie strony. Zrobiłem kilka eksperymentów, ale wyniki wydają się nieokreślone.History.js getState() na pageload
Moja strona internetowa jest wyszukiwarką, a zapytanie jest przechowywane w parametrach adresu URL: ?Query=cats
. Strona jest napisana wyłącznie w javascript. History.js działa świetnie, gdy wykonuję nowe wyszukiwanie, nowe zapytanie jest aktualizowane, a stan jest przesuwany.
Mój problem polega na tym, jak utworzyć stan początkowy, jeśli użytkownik ręcznie wprowadzi adres URL, w tym parametr Query
. Każdy sposób, w jaki próbuję to zrobić, skutkuje dwukrotnym uruchomieniem zapytania. Dwa przypadki użycia, które wydają się być sprzeczne, to:
- Użytkownik ręcznie wprowadza adres URL (
mydomain.com?Query=cats
) na pasku adresu i wciska enter. - Użytkownik przechodzi na stronę zewnętrzną, a następnie kliknie przycisk Wstecz
w obu przypadkach, obciążenia JavaScript, a więc wygląda na parametry URL do generowania początkowego stanu.
Jednak w drugim przypadku History.js wywoła zdarzenie ze stateczkowaniem oraz.
kod konieczne:
History.Adapter.bind(window,'statechange',function() { // Note: We are using statechange instead of popstate
var s = History.getState();
if(s.data["Query"]){
executeQuery(s.data);
}
});
i w $ (document) .ready mam
// Get history from URL
s = getQueryObjectFromUrl(location.href);
if(s["Query"]){
History.pushState(s,'',$.param(s))
}
Czy istnieje lepszy sposób obsłużyć tworzenia stanu początkowego od parametrów URL?
Dlaczego nie dajesz wyników użytkownika np. PHP po przejściu do /? Query = dasd bezpośrednio? –
Co z aplikacjami po stronie klienta? realpage.html/dynamicAppState zostaje pobrane przez serwer jako katalog, który nie istnieje, zmuszając do przepisania lub htaccess i poprawna strona nigdy nie zostanie załadowana. Nie musisz pisać kodu serwera, aby to działało ... to narzędzie po stronie klienta. Gdy użyto #, plik index.html zostanie wczytany, a dane po znaku # można łatwo przeanalizować. Co teraz robisz? –