Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: $.ajax w jQuery
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
SpiJay
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 !
PrinceOfPersia
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.
SpiJay
a jakieś pomysły ? :/
PrinceOfPersia
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.
SpiJay
mozesz podac przyklad na kodzie jak to zrobic ?
mortus
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.
PrinceOfPersia
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?
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.