[ S A J A @ 27.04.2016. 08:48 ] @
Zna li neko kako da updatujem URL adresu kod AJAX poziva?

Da objasnim: napravio sam nešto nalik Bazi Znanja, na stranici postoje dva diva, u levom je drvo sa kategorijama i tekstovima a u desnom divu se učitava sadržaj preko AJAX poziva. I to sve dobro radi. Samo mi se ne sviđa što se URL ne menja. Ako neko hoće da sačuva link nekog teksta, ne može, ili ako hoće da klikne na Back dugme, ne daje očekivani rezultat.

Sa druge strane, ne bih da koristim klasične linkove jer se onda učitava cela strana svaki put.

Evo ovako nešto bih hteo da postignem: http://docs.sencha.com/extjs/6...g_started/getting_started.html
[ Nemanja Avramović @ 27.04.2016. 09:49 ] @
Ovo nema veze sa PHP-om već sa JS-om: history.pushState

demo: http://html5demos.com/history
[ dusans @ 27.04.2016. 09:54 ] @
Kao što ti je Nemanja napisao, al' bih dodao još jednu stvar ...
Na serveru, prvi put, moraš ipak da gledaš i URL da bi odmah učitao
desni div sa odgovarajućim content-om na osnovu URL-a.
[ S A J A @ 27.04.2016. 10:00 ] @
Da, verujem da nema mnogo veze sa PHP-om, samo sam ja radio projekat u PHP-u pa sam ovde napisao.

Video sam da se na netu spominje ta pushState funkcija ali kažu da je to nešto novo, da ne radi sa starijim brauzerima pa sam mislio da ima neko drugo rešenje. Znači, osim toga nema drugih rešenja? Kako se to postizalo ranije pre html 5?
[ dusans @ 27.04.2016. 10:01 ] @
Mislim da se nije postizalo, pošto nije bilo moguće menjati url bez reloada,
pada mi na pamet neka skalamerija sa hash-om.

Mislim da je ipak čistije rešenje da se koristi history.pushState tamo gde može
a tamo gde ne može fallback-ovati na full page reload.
[ Shadowed @ 27.04.2016. 11:58 ] @
Citat:
dusans: pada mi na pamet neka skalamerija sa hash-om.

Upravo to, samo nije nikakava skalamerija :)

Ima bas i ne linku koji je Nemanja dao deo koji kaze:
Citat:
In a sense, calling pushState() is similar to setting window.location = "#foo", in that both will also create and activate another history entry associated with the current document


Uz, naravno, i razlike:
Citat:

The new URL can be any URL in the same origin as the current URL. In contrast, setting window.location keeps you at the same document only if you modify only the hash.
You don't have to change the URL if you don't want to. In contrast, setting window.location = "#foo"; only creates a new history entry if the current hash isn't #foo.
You can associate arbitrary data with your new history entry. With the hash-based approach, you need to encode all of the relevant data into a short string.
If title is subsequently used by browsers, this data can be utilized (independent of, say, the hash).
Note that pushState() never causes a hashchange event to be fired, even if the new URL differs from the old URL only in its hash.
[ plus_minus @ 27.04.2016. 12:22 ] @
Najbolji način (po meni) jeste pozivati ajax na osnovu hash vrednosti.. u slučaju gde browser history igra bitnu ulogu. Tačnije kroz window.onhashchange event.
Dakle, jedan prost event listener ...

Code (javascript):

window.onhashchange=function()
{
     // Ajax method + what else not here..
     // or ..
     // Ajax method with callback func. + what else not here...
     // - just! .. Right before ajax call. :)
};
 


.. ako ne želiš da koristiš history.pushState jer browseri, svi normalni i up-to-date, reaguju na history back/forward dugmiće kada ima hash promene.

Drugim rečima.

http://website.com/some_page


jeste jedna bookmark friendly stranica.

A ovo bi bila ...

http://website.com/some_page#ajax_fragment_inside_div_of_my_choice


.. takođe, url friendly bookmark-ready stranica, sa drugačijom sadržinom, ako se onhashchange + ajax combo, upotrebi na pravi način.
[ S A J A @ 28.04.2016. 15:35 ] @
Sad sam čuo da pisanje ovakvih aplikacija nije dobro za SEO jer google ima problema da dobro skapira strukturu sajta ako se ne koriste prave stranice nego ajax pozivi.
[ Shadowed @ 28.04.2016. 15:45 ] @
Mozes ti napraviti i da svaka od tih strana ima svoj link koji ako se otvori direktno ucita ti kompletnu stranu sa onim sto bi ucitao ajax.