[AJAX][PHP] Formularz z AJAX - zgodnie z MVC. |
[AJAX][PHP] Formularz z AJAX - zgodnie z MVC. |
24.10.2012, 18:21:38
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Mam taką zagwozdkę: zrobiłem formularz sprawdzający czy dany login już istnieje w bazie danych i wyświetlający informację na bieżąco po wprowadzeniu znaku (keyup).
AJAXem wysyłam posta do kontrolera url: "register/checkLogin",
W kontrolerze mam funkcję:
W modelu:
W modelu wywołując print_r($sth) daje taki efekt dla zajętego loginu: Array ( [userId] => 6 ). Dla wolnego nie zwraca nic. Nie podoba mi się, że w modelu mam umieszczony ten fragment:
Tylko nie wiem gdzie mam go wrzucić i jak przekazać odpowiednio? Do widoku? Do kontrolera? Czy może, wcale to nie jest złe i powinno być to w modelu? W widoku mam jedynie Gdyby mógł ktoś rzucić okiem i fachowo mnie oświecić jak to powinno się zrobić należycie, byłbym niezmiernie wdzięczny. |
|
|
24.10.2012, 18:29:20
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
zwracaj 0/1 i w js generuj html.
|
|
|
24.10.2012, 18:50:04
Post
#3
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 24 Dołączył: 21.10.2012 Skąd: Puławy Ostrzeżenie: (0%) |
Ja proponuję string wyświetlać w kontrolerze. W modelu zwróć sobie boolean, a w kontrolerze np. echo 'true/false' i gitara.
|
|
|
24.10.2012, 20:58:14
Post
#4
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) |
Pomiń zwracanie tego HTMLa (w zamian dodawaj go w jQ), zostaw tylko zwracanie "OK". Lub tak jak napisał Spawnm, zwracaj bool 0/1 - ale tak czy inaczej kod HTML dodałbym do jQuery.
|
|
|
24.10.2012, 23:31:07
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Model koniecznie powinien zwracać true / false, aby zachować jego uniwersalność - przecież możemy go wykorzystywać w różnych kontekstach, nie tylko ajaxowym.
Potem gdybyśmy chcieli zachować taką uniwersalność dla kontrolera to można się pokusić o sprawdzenie czy request jest ajaxowy. Zwykle w FW jest coś w stylu $this->request->isAjax(). Jeśli ajax dajesz echo albo json_encode(array('status' => $status)). Jeśli nie ajax to po prostu return $status. Ten post edytował markonix 24.10.2012, 23:31:25 -------------------- |
|
|
25.10.2012, 14:01:32
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Dzięki wszystkim, ale w szczególności @markonix, o to mi chodziło, teraz jest git.
w .js dałem
a w modelu
|
|
|
25.10.2012, 15:03:58
Post
#7
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
Ale czemu model zwraca jsona i czemu dajesz echo w modelu!? Niech zwraca boola, będziesz mógł wykorzystać w różnych przypadkach.
|
|
|
25.10.2012, 16:30:48
Post
#8
|
|
Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Chodzi Ci o coś takiego?
Tylko jak mam później to przekazać do skryptu .js w widoku? Muszę to jakoś "wyeksportować" do widoku przecież. A nie mogę, bo nie generuję oddzielnego widoku dla checkLogin, bo i po co, Gubię się z tym AJAXem ;/ Jak mam normalnie np. pobieranie tam wszystkich rekordów to robię tak: w kontrolerze generuję widok:
W modelu zwracam:
no i w widoku przykładowo wyświetlam tak
|
|
|
26.10.2012, 13:30:17
Post
#9
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) |
Albo jeszcze lepiej to się pewnie da zapisać zwracając wynik metody selectOne rzutowanej na boolean (tylko nie mam pewności co ta metoda normalnie zwraca). Gdy masz już model - czyli metodę to przechodzimy do ajax. W ajax wywołujesz URL twoja-strona.pl/klasa/metoda/ (w zależności od FW różnie to wygląda) przesyłając login. Kontroler wywołuje metodę z modelu z odpowiednim argumentem zawierającym login. Model zwraca true / false. Kontroler odbiera informacje i zwraca JSON w przypadku gdy jest to request ajaxowy. jQuery odbiera JSON z informacją i aktualizuje odpowiednio informacje przy formularzu. Ten post edytował markonix 26.10.2012, 13:31:10 -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 31.05.2024 - 13:40 |