Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][AJAX] Struktura po stronie serwera.
tolomei
post 4.09.2011, 12:59:52
Post #1





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

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


Witam.

Chciałbym zapytać o wasze doświadczenia przy obsłudze żądań AJAX po stronie skryptu PHP.

Przy projektach używałem dwóch sposobów:

Sposób 1.

Skrypt JS obsługując różne zdarzenia wysyła żądania postem do np. ajaxFunctions.php w podanej formie:

{ funkcja: 1, dane: data }
{ funkcja: 2, dane: data }

Strona php:

  1. // pomijam walidację i kwestie bezpieczeństwa
  2.  
  3. if(isset($_POST['funkcja'])) {
  4.  
  5. if($_POST['funkcja'] == 1) {
  6. // kod obsługi
  7. // zwracamy odpowiedź
  8. } elseif($_POST['funkcja'] == 2) {
  9. // kod obsługi
  10. // zwracamy odpowiedź
  11. } elseif($_POST['funkcja'] == 3) {
  12. // kod obsługi
  13. // zwracamy odpowiedź
  14. } else {
  15. // zwracamy błąd
  16. }
  17. }



Sposób 2.

Każde zdarzenie jest obsługiwane przez oddzielny skrypt php na serwerze.
Chyba nie potrzeba więcej wyjaśnień tutaj.


Oba sposoby wykorzystywałem i nie jestem z nich w 100% zadowolony.
Domyślam się, że jeszcze można by pójść w stronę OOP.

Macie jakieś własne sposoby implementacji ?

Dzięki.
Pozdro.


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post
bastard13
post 4.09.2011, 20:34:21
Post #2





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


Cytat
Domyślam się, że jeszcze można by pójść w stronę OOP.

Dobrze się domyślasz:)

Abstrahując jednak od tego, to dla każdego zapytania AJAXowego powinien być inny adres url np.
edycja profilu -> my_page.com/profile/edit
wyświetlanie listy zadań -> my_page.com/task_list

Czyli ta twoja funkcja ze sposobu pierwszego powinna być określona za pomocą url'a, natomiast pozostałe dane get'em lub post'em.
Często można spotkać doklejanie id do url'a, czyli jeżeli jestem użytkownikiem o id = 2, to link do edycji profilu wyglądałby tak:
my_page.com/profile/edit/2

Koniec końców raczej stosuj drugi sposób niż pierwszy:) W taki sposób łatwiej, a przede wszystkim czytelniej:) jest kontrolować uprawnienia użytkowników.


--------------------
Go to the top of the page
+Quote Post
ActivePlayer
post 4.09.2011, 20:38:34
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


a ja to robie tak (zend framework):

1. używam zend_layout domyślnie w aplikacjach. sama akcja zwraca tylko środek.
2. napisałem plugin, który w przypadku jeśli mamy zapytanie ajaxowe wyłącza layout

tym sposobem mam wymieszane wszystkie akcje ajaxowe oraz nei ajaxowe w controlerach (oczywiscie dobre nazewnictwo jest jak najbardziej wskazane).

fajne w tym jest to, że jeśli chcę przeładować ajaxem "centrum" aplikacji, to request z marszu zwróci mi tylko środek, a jak wywołam ten sam odnośnik w nowym oknie, to doklei layout i wszystko będzie działało odpowiednio.
Go to the top of the page
+Quote Post
bastard13
post 4.09.2011, 21:02:07
Post #4





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


Cytat
fajne w tym jest to, że jeśli chcę przeładować ajaxem "centrum" aplikacji, to request z marszu zwróci mi tylko środek, a jak wywołam ten sam odnośnik w nowym oknie, to doklei layout i wszystko będzie działało odpowiednio.

Nie wydaje mi się, żeby coś takiego było potrzebnym zabiegiem. W końcu wiesz, które akcje mają być responsem ajaxowym, a które nie, więc po co dodatkowo to sprawdzanie robić po stronie serwera? Jeżeli użytkownik wpisze ajaxowy url z palca to dlaczego otaczać to dodatkowo layoutem? Taka akcja nie jest pożądana, więc dlaczego nie wypluć po prostu czystego responsa?

Cytat
tym sposobem mam wymieszane wszystkie akcje ajaxowe oraz nei ajaxowe w controlerach

Dobrze prawi:) Logika jest ważniejsza niż typ żądania.


--------------------
Go to the top of the page
+Quote Post
ActivePlayer
post 4.09.2011, 21:34:36
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


Cytat
Nie wydaje mi się, żeby coś takiego było potrzebnym zabiegiem. W końcu wiesz, które akcje mają być responsem ajaxowym, a które nie, więc po co dodatkowo to sprawdzanie robić po stronie serwera? Jeżeli użytkownik wpisze ajaxowy url z palca to dlaczego otaczać to dodatkowo layoutem? Taka akcja nie jest pożądana, więc dlaczego nie wypluć po prostu czystego responsa?

u mnie jest to skonstruowane w ten sposób:
Kod
<a href="url_do_akcji" class="ajaxlink">link</a>

no i jak mam cos takigo to sobie javascriptem linki z klasą ajaxlink obsługuję do jakiegoś głównego diva. a jesli ktoś nie ma akurat javascriptu włączonego, to i tak całość zadziała normalnie, tyle że z przeładowaniem strony (i dla google też zadziała).
Go to the top of the page
+Quote Post
tolomei
post 5.09.2011, 00:51:09
Post #6





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

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


Na "ifach" robiłem ajaxowy chat online z konsultantem.
Rodzajów zapytań było wiele i w obrębie tego jednego modułu więc zrobiłem w ten sposób.

Świetne rozwiązanie ActivePlayer smile.gif
Dzięki za wypowiedzi.


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
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: 21.05.2024 - 07:12