Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> dwa problemy JS: wywolanie funkcji i window.history.pushState
wezyrno
post 28.07.2014, 08:23:37
Post #1





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 11.09.2011

Ostrzeżenie: (50%)
XXX--


1.

  1. echo "<script type='text/javascript'>funkcja();</script>";


Niestety funkcja w ogóle się nie wywołuje. Jeżeli zaś podmienie funkcja() na alert("Test"); to wyświetla sie... nie mam pojęcia dlaczego.

2.
window.history.pushState

Wiem jak sprawić dzięki temu, żeby w pasku adresu pojawiała się nazwa podstrony, która wyświetla się przez $.ajax. Problem polega na tym, że gdy ten link, załóżmy: localhost/wiadomości/ wygenerowany w js otworzę ręcznie np. odświeżajac strone... naturalnie wyświetla się komunikat o braku pliku. Moje pytanie brzmi, jak zrobić aby GET przekierowywał nie do pliku ale żeby przechwytywało to JS - wyświetlając stronę w ajaxie?

Z góry dziękuje.
Go to the top of the page
+Quote Post
Turson
post 28.07.2014, 08:24:52
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


1. Sprawdź konsolę
Go to the top of the page
+Quote Post
wezyrno
post 28.07.2014, 08:31:36
Post #3





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 11.09.2011

Ostrzeżenie: (50%)
XXX--


Jak mam sprawdzić konsole, skoro ta funkcja wywoluje sie wraz z otwarciem/odswiezeniem strony sad.gif
Go to the top of the page
+Quote Post
lukasz_os
post 28.07.2014, 08:43:19
Post #4





Grupa: Zarejestrowani
Postów: 203
Pomógł: 55
Dołączył: 23.11.2008
Skąd: UKF

Ostrzeżenie: (0%)
-----


Opcje > Narzędzia i tam szukaj. Ewentualnie rozszerzenia typu Firebug do firefoxa


--------------------
Pomagam jeśli mam czas oraz jak się na tym znam :D
Go to the top of the page
+Quote Post
wezyrno
post 28.07.2014, 09:29:14
Post #5





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 11.09.2011

Ostrzeżenie: (50%)
XXX--


Nic się nie wyświetla, ani w konsoli ani w firebug'u, ktorego posiadam.
Co więcej, gdy tą funkcje wywołam nie z PHP, ale bezpośrednio z JS to działa... dlatego nie rozumiem.

Nikt nie wie czym to może być spowodowane? Po prostu php nie wywołuje mi funkcji - jakiejkolwiek, ale alert() tak...
Go to the top of the page
+Quote Post
Turson
post 28.07.2014, 09:35:03
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Może po prostu wywołujesz funkcję zanim jest ona zadeklarowana
Go to the top of the page
+Quote Post
wezyrno
post 28.07.2014, 09:38:28
Post #7





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 11.09.2011

Ostrzeżenie: (50%)
XXX--


Dzięki, masz racje.
Wystarczyło dać setTimeout(function(){funkcja();},10);

Ale, gdy komuś załaduje się strona za wolno... to znaczy, że nie wyświetli?

Ten post edytował wezyrno 28.07.2014, 09:40:11
Go to the top of the page
+Quote Post
Turson
post 28.07.2014, 09:43:23
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Dodaj to w document.ready i po problemie
Go to the top of the page
+Quote Post
wezyrno
post 28.07.2014, 09:54:46
Post #9





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 11.09.2011

Ostrzeżenie: (50%)
XXX--


Stokrotne dzięki smile.gif

Ma ktoś pomysł co do tego?
Cytat
window.history.pushState

Wiem jak sprawić dzięki temu, żeby w pasku adresu pojawiała się nazwa podstrony, która wyświetla się przez $.ajax. Problem polega na tym, że gdy ten link, załóżmy: localhost/wiadomości/ wygenerowany w js otworzę ręcznie np. odświeżajac strone... naturalnie wyświetla się komunikat o braku pliku. Moje pytanie brzmi, jak zrobić aby GET przekierowywał nie do pliku ale żeby przechwytywało to JS - wyświetlając stronę w ajaxie?
Go to the top of the page
+Quote Post
lukasz_os
post 28.07.2014, 10:05:54
Post #10





Grupa: Zarejestrowani
Postów: 203
Pomógł: 55
Dołączył: 23.11.2008
Skąd: UKF

Ostrzeżenie: (0%)
-----


Dodawaj po załadowaniu strony przez ajax w adresie po hashu to co ma byc wyswietlone. Np:
www.domena.pl/#wiadomosci

W jsie po zaladowaniu strony sprawdzasz czy ustawiony jest hash (window.location.hash)i jak jest ładujesz odpowiednią podstronę. do tego aby strona była dobrze indeksowana przez google zainteresuj się tym zagadnieniem: https://developers.google.com/webmasters/ajax-crawling/ Lektura po angielsku ale który web developer nie zna teraz angielskiego smile.gif

Ten post edytował lukasz_os 28.07.2014, 10:06:42


--------------------
Pomagam jeśli mam czas oraz jak się na tym znam :D
Go to the top of the page
+Quote Post
wezyrno
post 28.07.2014, 10:22:27
Post #11





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 11.09.2011

Ostrzeżenie: (50%)
XXX--


Nie wiem czy dobrze zrozumiałem smile.gif

To www.domena.pl/#wiadomosci nie będzie indexowane przez google, a to tak?:
www.domena.pl/#!wiadomosci

Ten post edytował wezyrno 28.07.2014, 10:23:03
Go to the top of the page
+Quote Post
trueblue
post 28.07.2014, 10:23:38
Post #12





Grupa: Zarejestrowani
Postów: 6 767
Pomógł: 1824
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Powinieneś sprawdzić URL (obiekt window.location), podmienić historię z pomocą replaceState (nie pushState), załadować ajaxem treść strony z URL.


--------------------
Go to the top of the page
+Quote Post
lukasz_os
post 28.07.2014, 10:39:56
Post #13





Grupa: Zarejestrowani
Postów: 203
Pomógł: 55
Dołączył: 23.11.2008
Skąd: UKF

Ostrzeżenie: (0%)
-----


Masz strone główna w adresie www.domena.pl. Jezeli nie chcesz dodawac strony do google możesz zrobić podstrony typu:
www.domena.pl/#wiadomosci
www.domena.pl/#oferta
www.domena.pl/#kontakt

Po wpisaniu takiego adresu w url powinieneś sprawdzić co jest po # i pobrać ajaxem odpowiednią podstronę.

co do indeksowania przez google to robot rozpoznaje ciąg #! i zamienia to na rządanie GET " _escaped_fragment_"

Tak więc jeżeli Twoje adresy będą miały w adresie:
www.domena.pl/#!wiadomosci
to robot google będzie szukał na twoim serwerze strony o takim adresie:
www.domena.pl?_escaped_fragment_=wiadomosci
więc musisz obsłużyć te wszystkie strony w ten sposób.

Odnośnie ostatniego posta możesz uzyć splita po "=" lub za pomącą indexOf znaleźć gdzie jest znak = i zrobić substringa.

Ten post edytował lukasz_os 28.07.2014, 10:42:51


--------------------
Pomagam jeśli mam czas oraz jak się na tym znam :D
Go to the top of the page
+Quote Post
trueblue
post 28.07.2014, 10:57:05
Post #14





Grupa: Zarejestrowani
Postów: 6 767
Pomógł: 1824
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Nie wiem czemu mieszasz użycie hash z History API.
Dla hasha odpowiednim jest zdarzenie onHashChange, używając History API można z powodzeniem używać standardowych URLi.


--------------------
Go to the top of the page
+Quote Post
wezyrno
post 28.07.2014, 11:08:28
Post #15





Grupa: Zarejestrowani
Postów: 130
Pomógł: 0
Dołączył: 11.09.2011

Ostrzeżenie: (50%)
XXX--


Rozumiem wszystko, dzięki za objąsnienie.
Wiem też już jak wczytać localhost/#dane

var podstrona = window.location.hash;
if(podstrona == '#dane') {
}


ale jak wczytać (opierając się na powyższym skrypcie)
coś takiego: localhost/#dane=1200 - jak sprawdzić numer następujący po #dane= ?
Go to the top of the page
+Quote Post
lukasz_os
post 28.07.2014, 11:18:16
Post #16





Grupa: Zarejestrowani
Postów: 203
Pomógł: 55
Dołączył: 23.11.2008
Skąd: UKF

Ostrzeżenie: (0%)
-----


  1. params = hash.split('=');
  2. key = params[0];
  3. value=params[1];

w wartości key masz "dane", a w value masz "1200".




--------------------
Pomagam jeśli mam czas oraz jak się na tym znam :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.06.2024 - 04:08