Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][AJAX] Fragment (#)
Forum PHP.pl > Forum > PHP
Chys
Witam, planuję zrobić bogatą stronę z użyciem Ajax'a i oczywiście php.
Pomyślałem, że każdy link mógłby być obsługiwany przez Ajax'a: chodzi o to, żeby w ogóle nie zachodziło odświeżanie strony.
Jak wiadomo, aby kliknięcie linku nie wywołało przeładowania strony, musi mieć to samo zapytanie co obecne i jakis fragment (#) określający id jakiegoś elementu na stronie. I zapytanie mające na celu wyświetlenie newsa miało by taką postać: ?newsid=15
Używając Ajax'a, fragment miałby postać #newsid=15.
I teraz jest problem: ktoś chciałby przesłać znajomemu link z owym newsem, a byłby on taki: http://www.exemple.com#newsid=15 co naturalnie nie wyświetli newsa o id 15, tylko stronę główną. Pytanie brzmi: czy i jeśli tak, to jak, serwer www może rozpoznać fragment URI, i przekierować z np: http://www.exemple.com#newsid=15 na normalny adres z zapytaniem http://www.exemple.com?newsid=15 ?
Z góry dziękuję za pomoc.
rolnix
Chyba musisz użyc innego znaku... bo w URLu wysyłanym od przeglądarki do serwera nie ma nawet tego "#", służy to tylko przeglądarce do poruszania się po już przysłanej stronie winksmiley.jpg
Chys
No to jest jakiś inny sposób na generowanie dynamicznej treści Javascript'em i Ajax'em, żeby można to było później komuś przesłać w postaci linku?
rolnix
Odsyłam do mod_rewrite.
NoiseMc
Zrob normalna strone, z normalnymi linkami. Jak juz wszystko bedzie dzialac to wtedy na linki zaloz sobie na przyklad onclick="return wczytajNews (15)", a funkcja wczytajNews bedzie zwracala false przez co link bedzie nieaktywny.
W ten sposob robisz strone przyjazna dla crawlerow i jednoczesnie "on top of that" dajesz ajaxowe bajerki dla uzytkownikow.
Chys
Dzięki za mod_rewrite, ale mi nie działa sad.gif
Jak mam się dowiedzieć, czy mój apache to obsługuje?
Robię dokładnie tak, jak na home.pl jest to opisane, w katalogu głównym serwera umieściłem plik index.php zawierający:
  1. <?php
  2. echo $_GET['id'];
  3. ?>

oraz w tym samym katalogu plik .htaccess:
Cytat
RewriteEngine on
RewriteRule id/([a-zA-Z0-9]) index.php?id=$1

Teraz po wpisaniu adresu, np http://127.0.0.1/?id=abcd123 otrzymuję oczywiście stronę z treścią abcd123, jednak po wpisaniu http://127.0.0.1/id/abcd123 otrzymuję komunikat o błędzie, jakby serwer szukał domyślnego pliku w folderze id/abcd123, czy ktoś pomoże co robię źle?
rolnix
A w httpd.conf włączyłeś ten moduł?
Chys
No teraz usunąłem znak komentarza w httpd.config, jednak przy restarcie apache jest komunikat o błędzie, że moduł mod_rewrite nie znajduje się na liście załadowanych modułów... Oznacza to, że go po prostu nie ma na moim apach'u ?
rolnix
Wrzuć odpowiedni plik dll/so (zależy, czy win32/linux) do katalogu z bibliotekami apache'a i wtedy spróbuj.
Chys
A skąd mogę wziąć mod_rewrite.dll? Szukam ciągle w google, ale jakoś znaleźć nie mogę blinksmiley.gif
drPayton
.dll? Eeee, ja na windzie mam .so winksmiley.jpg Jeśli Ci to nie działa, to zobacz jeszcze, czy masz taki fragment:
Kod
#
# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.  See also the AllowOverride
# directive.
#
AccessFileName .htaccess

i taki:
Kod
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride All
domis86
to co chcesz zrobic to "degradable AJAX" + "HIJAX"
polecam:

http://particletree.com/features/the-hows-...egradable-ajax/
http://www.softwaredeveloper.com/features/...ay-nice-061907/

to bardzo ładne i nowoczesne podejscie do tworzenia aplikacji internetowych smile.gif
Chys
drPayton, pomogło, dzięki smile.gif
domis86, jako że to jest po angielsku, a że mój angielski jest jaki jest... To idzie mi to powoli, ale postaram się całe artykuły przeczytać winksmiley.jpg
I mam teraz tylko ostatnie pytanie dotyczące również pierwszego pytania w pierwszym poście; otóż wracając do problemu przesłania koledze linka, fraza w .httaccess:
Kod
RewriteRule \#([0-9a-zA-Z=&]+) index.php?$1

oczywiście nie działa, bo # jest znakiem komentarza, nieprawdaż?
Podstawienie jakiegokolwiek innego znaku, np !
Kod
RewriteRule \!([0-9a-zA-Z=&]+) index.php?$1

da pożądany efekt; zapytanie http://127.0.0.1/!id=news&newsid=154 będzie oznaczało to samo co http://127.0.0.1/?id=news&newsid=154
Tylko jak to połączyć ze znakiem "#", bo przecież inaczej nie mogę zmieniać adresu URI po stronie przeglądarki bez przeładowania strony?
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.