Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> $.ajax w jQuery
SpiJay
post
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 2
Dołączył: 18.11.2009
Skąd: Grudziądz

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


Witam serdecznie,

zrobiłem takie oto filtrowanie: http://iam4u-server.home.pl/sklep/filter.php aczkolwiek nie działa to w taki sposób w jaki sobie to założyłem...
Pokazuje mi ładnie wysortowane wyniki z bazy, ale nie pamięta wszystkich wartości filtrowania, dla przykładu:

jeżeli wybiorę kolor np czerwony oraz smak np wytrawne, to wyszukuje mi wyłącznie rekordy z wartością "wytrawne", a kolor jest pomijany.
Wiem, że jest wina w skrypcie jQuery, ponieważ ręcznie wpisane wartości w skrypcie PHP działają poprawnie.

Ad1. Macie jakieś rady ?

Ad2. Ponadto chciałbym prosić o wyjaśnienie w jaki sposób wysłać wyniki sortowania z pliku function.php do pliku index.php ?

JS:
[JAVASCRIPT] pobierz, plaintext
  1. $(window).load(function() {
  2.  
  3. $(".filtr").click(function() {
  4.  
  5. var kolor = $(this).find('div.k').add('id');
  6. var smak = $(this).find('div.s').attr('id');
  7. var cena = $(this).find('div.c').attr('id');
  8. var region = $(this).find('div.r').attr('id');
  9. var kraj = $(this).find('div.p').attr('id');
  10.  
  11. $.ajax({
  12. url: 'function.php',
  13. data: {
  14. funkcja: 'szukaj',
  15. kolor: kolor,
  16. smak: smak,
  17. cena: cena,
  18. region: region,
  19. kraj: kraj,
  20. },
  21. type: 'post',
  22. success: function(output) {
  23. $('.jo').remove();
  24. $("#wyniki").append(output);
  25. return false;
  26. }
  27. });
  28. });
  29. });
[JAVASCRIPT] pobierz, plaintext


PHP:
  1. // Ajaxowe wyszukiwanie win
  2. if(isset($_POST['funkcja']) && !empty($_POST['funkcja'])) {
  3. switch($_POST['funkcja'])
  4. {
  5. case 'szukaj':
  6. szukaj($_POST['kolor'], $_POST['smak'], $_POST['cena'], $_POST['region'], $_POST['kraj']);
  7. break;
  8. }
  9. }
  10.  
  11. function szukaj($kolor, $smak, $cena, $region, $kraj) {
  12. $qwerty = "SELECT * FROM `wina` WHERE
  13. kolor LIKE '%".$kolor."%'
  14. AND smak LIKE '%".$smak."%'
  15. AND cena_handlowa LIKE '%".$cena."%'
  16. AND region LIKE '%".$region."%'
  17. AND kraj LIKE '%".$kraj."%'
  18. ORDER by id";
  19. $sql = mysql_query($qwerty);
  20. while($id = mysql_fetch_assoc($sql)) {
  21. echo '
  22. <div class="jo" style="background: #aaa; margin-bottom: 5px;">
  23. '.$id['id'].' |
  24. '.$id['nazwa'].' |
  25. '.$id['region'].' |
  26. '.$id['kraj'].' |
  27. '.$id['smak'].' |
  28. '.$id['kolor'].' |
  29. '.$id['cena_handlowa'].' |
  30. '.$id['zdj_mini'].' |
  31. '.$id['zdj_duze'].'
  32. </div>
  33. ';
  34. }
  35. }


HTML:
  1. <div id="filtr-body">
  2. <div id="filtr-kolor">
  3. <span class="filtr-name">Kolor</span>
  4. <div class="filtr"><div class="k" id="cze"><img src="images/wina-i.png" /> Czerwone</div></div>
  5. <div class="filtr"><div class="k" id="bia"><img src="images/wina-i.png" /> Białe</div></div>
  6. <div class="filtr"><div class="k" id="roz"><img src="images/wina-i.png" /> Różowe</div></div>
  7. </div>
  8. <div id="filtr-cena">
  9. <span class="filtr-name">Cena</span>
  10. <div class="filtr"><div class="c" id="1"><img src="images/wina-i.png" /> do 50zł</div></div>
  11. <div class="filtr"><div class="c" id="2"><img src="images/wina-i.png" /> 50zł - 100zł</div></div>
  12. <div class="filtr"><div class="c" id="3"><img src="images/wina-i.png" /> ponad 100zł</div></div>
  13. </div>
  14. <div id="filtr-smak">
  15. <span class="filtr-name">Smak</span>
  16. <div class="filtr"><div class="s" id="slo"><img src="images/wina-i.png" /> Słodkie</div></div>
  17. <div class="filtr"><div class="s" id="wyt"><img src="images/wina-i.png" /> Wytrawne</div></div>
  18. <div class="filtr"><div class="s" id="mus"><img src="images/wina-i.png" /> Musujące</div></div>
  19. </div>
  20. <div id="filtr-kontynent">
  21. <span class="filtr-name">Region</span>
  22. <div class="filtr ameryka"><div class="r" id="ame"><img src="images/wina-i.png" /> Ameryka</div></div>
  23. <div class="filtr europa"><div class="r" id="eur"><img src="images/wina-i.png" /> Europa</div></div>
  24. </div>
  25. <div id="filtr-panstwa">
  26. <span class="filtr-name">Kraj</span>
  27. <div class="filtr ameryka"><div class="p" id="arg"><img src="images/wina-i.png" /> Argentyna</div></div>
  28. <div class="filtr ameryka"><div class="p" id="chi"><img src="images/wina-i.png" /> Chile</div></div>
  29. <div class="filtr ameryka"><div class="p" id="bra"><img src="images/wina-i.png" /> Brazylia</div></div>
  30.  
  31. <div class="filtr europa"><div class="p" id="fra"><img src="images/wina-i.png" /> Francja</div></div>
  32. <div class="filtr europa"><div class="p" id="wlo"><img src="images/wina-i.png" /> Włochy</div></div>
  33. <div class="filtr europa"><div class="p" id="his"><img src="images/wina-i.png" /> Hiszpania</div></div>
  34. </div>
  35. <div id="filtr-result">Znaleziono wyników: <b>4178</b></div>
  36.  
  37. <div id="wyniki" style="clear: both; float: none;"></div>


Pozdrawiam !


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
PrinceOfPersia
post
Post #2





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


problem chyba jest w this:
Kod
$(".filtr").click(function() {
   var kolor = $(this).find('div.k').attr('id');

w ten sposób nie znajdzie ci tego, bo this to w tym wypadku dany .filtr.


--------------------
Go to the top of the page
+Quote Post
SpiJay
post
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 2
Dołączył: 18.11.2009
Skąd: Grudziądz

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


a jakieś pomysły ? :/


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
PrinceOfPersia
post
Post #4





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


noo... po prostu zamiast:
Cytat
var kolor = $(this).find('div.k').attr('id');

musisz walnąć inny selektor w jQuery. Coś na zasadzie
Kod
var kolor = $("#filtr-kolor .filtr div.k"). attr('id')

(ale to ci nie zadziała do końca, ponieważ musisz jeszcze doprecyzować, żeby wybrał tylko ten element div.k, który jest zaznaczony/włączony, teraz wybierzesz pierwszy z brzegu).

poza tym tam masz literówkę w jednym miejscu - add zamiast attr.


--------------------
Go to the top of the page
+Quote Post
SpiJay
post
Post #5





Grupa: Zarejestrowani
Postów: 63
Pomógł: 2
Dołączył: 18.11.2009
Skąd: Grudziądz

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


mozesz podac przyklad na kodzie jak to zrobic ?


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Mnie zastanawia, dlaczego używasz do tego div-ów, a nie formularza (ładne formularze można uzyskać za pomocą CSS'a lub pluginów do jQuery)? Niemniej, każdy kliknięty element powinien być w jakiś sposób "oznaczony" (np. dodatkową klasą selected, przy czym zauważ, że pola typu checkbox lub radio już taką "właściwość" posiadają (te zaznaczone)). Można by się zastanowić nad użyciem jQuery UI Selectable. W Twoim przykładzie wybrać mogę tylko jedną z opcji koloru, smaku, ceny itd., co nie jest zbyt słusznym rozwiązaniem, jeśli bierzemy pod uwagę potrzeby potencjalnego użytkownika końcowego (być może klient będzie chciał zarówno białe, jak i różowe wino za które może zapłacić od 99 - 159 zł). Elementy HTML, które posiadają id powinny być elementami "istotnymi", czyli takimi, które dokładnie określają czego dokument HTML i jego treść w tym danym miejscu dotyczy. Chyba nadużywasz id-ów, co może mieć negatywne konsekwencje choćby w kwestii pozycjonowania strony.

Jeśli chodzi o PHP to funkcja szukaj jest źle zorganizowana. Pamiętaj, że skrypt wywoływany jest wraz z każdym kliknięciem/zaznaczeniem elementu, co oznacza, że nie wszystkie parametry w każdym kolejnym wywołaniu funkcji szukaj będą dostępne (ewentualnie będą puste - NULL). Funkcja szukaj również (to o czym pisałem w kwestii zaznaczania wybranych właściwości) nie uwzględnia możliwości wyszukiwania według dwóch i większej liczby wartości parametru np. win w dwóch/trzech/itd. różnych kolorach.

Dane zwracaj w takiej formie, która Ci odpowiada. Ja użyłbym json-a i zwróciłbym tylko i wyłącznie dane pobrane z bazy w postaci tablicy, niemniej nic nie stoi na przeszkodzie, aby zwracać HTML.
Go to the top of the page
+Quote Post
PrinceOfPersia
post
Post #7





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


Cytat(SpiJay @ 5.04.2013, 14:21:08 ) *
mozesz podac przyklad na kodzie jak to zrobic ?

tak, za ciebie zrobię od razu. Żeby zobaczyć co jest źle, musiałem obejrzeć ten twój kod, a potem tę stronę i kilka (5-10? nie wiem) minut się głowić, aż zobaczyłem tamto z tym this. A potem jeszcze odpisałem raz i drugi i zobaczyłem tę literówkę z add. Uszanuj to, że ktoś ci pomaga a nie proś o zrobienie całej pracy z gotowca. Nawet nie znając za bardzo specyfiki JavaScriptu, z samej dokumentacji jQuery możesz już dalej sobie wykombinować jak to zrobić: http://api.jquery.com/category/selectors/

Tak abstrahując od tego tematu, bo problem się powtarza, to zastanawiam się czemu ludzie biorą się za robienie zleceń, które są ponad ich możliwości programistyczne?


--------------------
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 Aktualny czas: 22.08.2025 - 11:04