Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][JavaScript][PHP]Dynamiczne ładowanie danych do <SELECT> dropdown list(menu)
ghastblood
post 6.06.2014, 16:22:00
Post #1





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


Witam,

może mnie ktoś nakierować jak powinno działać dynamiczne ładowanie danych do dropdown list(menu). W projekcie nad którym pracuję mam ustawienia w których podaje godzinę oraz stanowisko na którym ma znaleźć się człowiek o danej godzinie. Przez AJAX ładuje daną osobę otwierająć w divie kod z formularzami co ma wykonać na danym stanowisku i przy danej czynności są 2 selecty ze stanowiskie oraz godziną. Przekazanie danych przez get i załadowanie 3 pliku do diva mija się z celem. Jak mógł bym coś takiego wykonać?

Wydaję mi się że najlepiej było by pobrać wolne stanowiska oraz godziny do tablicy i przez ajax operować danymi z tablicy dla przykładu

1. Odbiór paczki | 10:00 | 12
2. Dostarczenie paczki | 11:00 | 1

czyli jak wybieram godzinę 10:00 to w select option pojawia mi się wolne stanowiska o tej godzinie. zmianna godziny na 9:00 spowoduje zmiane listy ze wolnymi stanowiskami. Najlepiej jak jeszcze kolorowało by wolne stanowiska na zielono a zajęte na czerwono.
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
Turson
post 6.06.2014, 19:17:56
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


http://turson.pl/blog/dynamiczne-zalezne-selecty/
Go to the top of the page
+Quote Post
ghastblood
post 6.06.2014, 19:32:05
Post #3





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


Cytat(Turson @ 6.06.2014, 20:17:56 ) *



hmm, o to chodziło tylko nie da rady się zrobić bez użycia pliku szukaj.php bo teraz to było by tak queue.php odwołuje się do pliku getUser.php a getUser.php do searchQueue.php

fajnie jak dało by się ograniczyć w ogóle do jednego pliku.
Go to the top of the page
+Quote Post
Turson
post 6.06.2014, 19:34:59
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Teoretycznie w jednym pliku też się da. Wysyłasz POSTem np. $_POST['ajax'] i sprawdzasz
  1. if(isset($_POST['ajax'])){
  2. //pobierz dane, zwróć
  3. die(); //kończy dalsze wykonywanie pliku
  4. }
Go to the top of the page
+Quote Post
ghastblood
post 15.06.2014, 17:04:03
Post #5





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


Wszystko ładnie pięknie do póki nie pojawiło się klika selectów z tej samej kategorii.

wybieram zawodnika i na podstawie danych z bazy danych generuje mi formularz.

np. zawodnik uczestniczy w 2 konkurencjach

to generuje mi 6 selectów

konkurencja1 | pawilon | godzina | stanowisko
konkurencja2 | pawilon | godzina | stanowisko

pawilon = select
godzina = select
stanowisko = select


żeby rozróżnić selecty można dodać tablice id="pawilon[id_konkurencji]" name="pawilon[id_konkurencji]"

tylko jak zrobić żeby kod js odczytywał z tablicy zmiane konkuretnego id

  1. $(document.body).on('change', '#pawilon', function() {
  2. $.ajax({
  3. type: 'POST',
  4. url: 'searchQueue.php',
  5. success: function(msg){
  6. $("#godziny").html(msg);
  7. }
  8. })
  9. });



Go to the top of the page
+Quote Post
Turson
post 15.06.2014, 17:09:41
Post #6





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Przede wszystkim musisz zmienić id pawilon na klasę, ponadto dodać atrybut id_konkurencji, czyli
  1. <select class="pawilon" id_konkurencji="wstaw tutaj id konkurencji">


w js pobierasz id:
[JAVASCRIPT] pobierz, plaintext
  1. $(document.body).on('change', '.pawilon', function() {
  2. var id_konkurencji = $(this).attr('id_konkurencji');
  3. $.ajax({
  4. type: 'POST',
  5. url: 'searchQueue.php',
  6. success: function(msg){
  7. $("#godziny").html(msg);
  8. }
  9. })
  10. });
[JAVASCRIPT] pobierz, plaintext
Go to the top of the page
+Quote Post
ghastblood
post 15.06.2014, 17:19:21
Post #7





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


ok, ale teraz muszę kod html wyświetlić w odpowiednim selecie wiec jakoś var id_konkurencji muszę przekazać do odpowiedniego selecta
Go to the top of the page
+Quote Post
Turson
post 15.06.2014, 17:47:18
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


To znaczy chcesz do selecta wrzucić id_konkurencji czy odpowiedź z żądania ajaxa??
Go to the top of the page
+Quote Post
ghastblood
post 16.06.2014, 17:07:26
Post #9





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


odpowiedz w select który odpowiada za konkretną konkurencje.

czyli skoro w pawilon mamy id_konkurencji="1"> to chcemy wyświetlić odpowiedz w select godziny id_konkurencji="1"> następnie jak wybierzemy godzinę to tak samo musimy przekazać odpwiedz do select stanowisko
Go to the top of the page
+Quote Post
Turson
post 16.06.2014, 19:07:01
Post #10





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


No ok, ale w czym problem, bo poprzednie posty z przykładami o tym mówią
Go to the top of the page
+Quote Post
ghastblood
post 16.06.2014, 19:26:53
Post #11





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


hmm poprzednie posty mówią o jasno określonych id selectów gdzie ma być załadowana odpowiedz u ciebie jest to id="modele" a u mnie godziny. Niby wystarczy zmienić nazwę ale co w przypadku gdy w formularzu musisz wybrać 3,4 lub 5 marek samochodów, modeli i koloru trzeba. Wydaje mi się że najlepszą opcją było by zastosowanie tablic czyli marka[], model[] i kolor[]. Jak było by do wybrania 5 marek to zawsze odpowiedz bedzie się pojawiała w pierwszym selekcie napodkanym przez skrypt. Jak zasotsuje nazwnictwo marka1, marka2 itd to dla każdego pola bede musiał mieć odpowiedni kod JS, a raczej na tym nie na tym a to polegać. Skoro cały formularz jest tworzony dynamicznie na podstawie danych z mysql to jakoś trzeba te pola rozrzóżniać z poziomu JS.
Go to the top of the page
+Quote Post
Turson
post 16.06.2014, 19:43:25
Post #12





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Opakuj selecty te które są na tym samym poziomie czyli teoretycznie np. marka i model w jednego diva, powiedzmy:
  1. <div class="container">
  2. <select class="marka"></select>
  3. <select class="model"></select>
  4. </div>

możesz mieć wtedy selecty z tą samą klasą a wybierając select, do którego załaduje odpowiednie opcje piszesz $(this).parent('.container').find('.model').html('<option>...');
Go to the top of the page
+Quote Post
ghastblood
post 16.06.2014, 20:06:47
Post #13





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


hmm, chyba coś robię nie tak.

http://jsfiddle.net/CnAee/
Go to the top of the page
+Quote Post
Turson
post 16.06.2014, 20:19:22
Post #14





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


http://jsfiddle.net/CnAee/1/
Generalnie kwestia zmiany this na that. error: function() dałem tylko dla testów
Go to the top of the page
+Quote Post
ghastblood
post 16.06.2014, 20:29:52
Post #15





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


hmm, na jsfiddle działa jak zmienie URL na mój kod searchQueue.php kod przestaje działać. W firebugu w skrypt zostaje wywołany status 200 OK więc powinno dodać mi odpowiedzi z kodu js

Ten post edytował ghastblood 16.06.2014, 20:30:43
Go to the top of the page
+Quote Post
Turson
post 16.06.2014, 20:35:00
Post #16





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Przecież na jsfiddle jest
Kod
success: function(){
            $(that).parent('.container').find('.godziny').html("<option>10:00</option>");

czyli nie pobiera żadnej odpowiedzi

powinno
Kod
success: function(msg){
            $(that).parent('.container').find('.godziny').html(msg);


dla testów daj jeszcze np. alert(msg)

Ten post edytował Turson 16.06.2014, 20:36:00
Go to the top of the page
+Quote Post
ghastblood
post 20.06.2014, 18:20:22
Post #17





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


poradziłem sobie jakoś smile.gif dzięki wielki za pomoc jakoś nie mogłem sobie z tym poradzić smile.gif teraz tylko muszę jakoś zrobić kolorowanie zajętych stanowisk na czerwono i fajnie jak przy wyborze godziny w nawiasie była by liczba wolnych stanowisk.

zapomniałem o bardzo ważnej rzeczy jaką jest sam zapis do bazy danych.


Wpadłem na taki pomysł.
  1. $(document.body).on('submit', 'form', function() {
  2. var godzina = $(this).val();
  3. var that = this;
  4. $.ajax({
  5. type: 'POST',
  6. url: 'searchQueue.php?mode=add',
  7. data: {
  8. 'zawodnik': $('.zawodnik').val(),
  9. 'pawilon': $('.pawilon').val(),
  10. 'godzina': $('.godziny').val(),
  11. 'stanowisko': $('.stanowiska').val()
  12. },
  13. success: function(msg){
  14. $(".test").html(msg);
  15. }
  16. })
  17. return false;
  18. });



Problem w tym że data przechwytuje pierwsze wartości z formularza.
Go to the top of the page
+Quote Post
trueblue
post 20.06.2014, 18:30:50
Post #18





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


  1. 'zawodnik': $('.zawodnik option:selected').val(),


--------------------
Go to the top of the page
+Quote Post
ghastblood
post 20.06.2014, 18:36:17
Post #19





Grupa: Zarejestrowani
Postów: 360
Pomógł: 12
Dołączył: 17.09.2009
Skąd: Warszawa

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


ajajaj. Sorki że nie wyjaśniłem dokładnie chodzi o to że formularz generuje kilka konterenów z 3 selectami

konkurencja1 | pawilon | godzina | stanowisko
konkurencja2 | pawilon | godzina | stanowisko

i z każdego selecta potrzebuje pobrać wartość

czyli $_POST['konkurencja1'],$_POST['pawilon1'],$_POST['godzina1'],$_POST['stanowisko1'],$_POST['konkurencja2'],$_POST['pawilon2'],$_POST['godzina2'],$_POST['stanowisko2']

w formularzu mam name='konkurencja[]' itd
Go to the top of the page
+Quote Post
trueblue
post 20.06.2014, 18:41:10
Post #20





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Tak?
  1. 'zawodnik1': $('.zawodnik:eq(0) option:selected').val(),
  2. 'zawodnik2': $('.zawodnik:eq(1) option:selected').val(),
  3. 'zawodnik3': $('.zawodnik:eq(2) option:selected').val(),
  4. 'zawodnik4': $('.zawodnik:eq(3) option:selected').val(),


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 14.08.2025 - 08:26