Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dwa problemy JS: wywolanie funkcji i window.history.pushState
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
wezyrno
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.
Turson
1. Sprawdź konsolę
wezyrno
Jak mam sprawdzić konsole, skoro ta funkcja wywoluje sie wraz z otwarciem/odswiezeniem strony sad.gif
lukasz_os
Opcje > Narzędzia i tam szukaj. Ewentualnie rozszerzenia typu Firebug do firefoxa
wezyrno
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...
Turson
Może po prostu wywołujesz funkcję zanim jest ona zadeklarowana
wezyrno
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?
Turson
Dodaj to w document.ready i po problemie
wezyrno
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?
lukasz_os
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
wezyrno
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
trueblue
Powinieneś sprawdzić URL (obiekt window.location), podmienić historię z pomocą replaceState (nie pushState), załadować ajaxem treść strony z URL.
lukasz_os
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.
trueblue
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.
wezyrno
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= ?
lukasz_os
  1. params = hash.split('=');
  2. key = params[0];
  3. value=params[1];

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


To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.