Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [jQuery] Pomoc w wysłaniu danych, czyli dlaczego <button type=submit> nie wysyla danych ?
Tomplus
post
Post #1





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Witam,

Mam taki prosty kod jQuery
  1. $(document).ready( function(){
  2. $('#ZapiszDane').submit(function() {
  3. $.post('zapiszdane.php', $('#ZapiszDane').serialize() , function(data) {
  4. alert(data);
  5. });
  6. return false;
  7. });
  8. })

oraz formularz też wyjątkowo prosty:

  1. <form id='ZapiszDane' action='zapiszdane.php' method='post'>
  2. <button type='submit' name='par' value='1416'>Wyslij</button>
  3. <input type='radio' id='radio1_1416' name='r1[1416]' checked><label for='radio1_1416'></label>
  4. <input type='radio' id='radio2_1416' name='r2[1416]'><label for='radio2_1416'></label>
  5. <input type='radio' id='radio3_1416' name='r3[1416]'><label for='radio3_1416'></label>
  6. </form>


Nie wiem czego nie dodaje, ale nie potrafię uzyskać danych name and value z guzika BUTTON.

Gdy wysyłam bez kodu JS, to mam wszystkie dane czyli $_POST['par'] oraz $_POST['r'.$i] i jestem zadowolony, ale po wprowadzeniu kodu jQuery, guzik button nie wysyła mi danych do pliku z wyjątkiem danych z INPUTów.

Aha... <input type='submit'/> też nie wysyła przy jQuery.

Co zrobić aby jQuery wysłało WSZYSTKIE dane?
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #2





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready( function(){
  2. $('#ZapiszDane').submit(function() {
  3. var self = this
  4.  
  5. var buttons_params = []
  6. $(self).find('button').each(function(){
  7. buttons_params.push( this.name + '=' + this.value )
  8. })
  9. var params = $(self).serialize() + '&' + buttons_params.join('&')
  10.  
  11. $.post('zapiszdane.php', params, function(data) {
  12. alert(data)
  13. });
  14. });
  15. return false
  16. })
[JAVASCRIPT] pobierz, plaintext


Ten post edytował wNogachSpisz 9.04.2011, 17:45:09
Go to the top of the page
+Quote Post
Tomplus
post
Post #3





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Poprawiłem trochę twój skrypt bo brakowało średników i nie działała funkcja submit po kliknięciu i skrypt nadal nie działa tak jak należy.

bo faktycznie dostarcza mi dane ale co zrobić jeżeli mam więcej niż guzik BUTTON w tym samym formularzu ?
np.

<button type='submit' name='par' value='1416'>Wyslij</button>
<button type='submit' name='par' value='1466'>Wyslij</button>
<button type='submit' name='par' value='2010'>Wyslij</button>

wtedy za każdym razem gdy kliknę submit wysle mi wartość ostatnią 2010, a nie np. 1416.

  1. $(document).ready( function(){
  2. var self = this;
  3. var buttons_params = [];
  4. $(self).find('button').each(function(){
  5. buttons_params.push( this.name + '=' + this.value );
  6. })
  7. var params = $(self).serialize() + '&' + buttons_params.join('&');
  8.  
  9.  
  10. $('#ZapiszDane').submit(function() {
  11. $.post('zapiszdane.php', params, function(data) {
  12. alert(data);
  13. });
  14. return false;
  15. });
  16. })


jak ten problem rozwiązać ?

Ten post edytował Tomplus 9.04.2011, 18:08:30
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #4





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(Tomplus @ 9.04.2011, 19:08:04 ) *
za każdym razem gdy kliknę submit wysle mi wartość ostatnią 2010, a nie np. 1416.


I bardzo dobrze, wszystkie butonny mają taką samą nazwę, więc brany ostatni w kolejności..
Czego innego byś chciał?

Cytat(Tomplus @ 9.04.2011, 19:08:04 ) *
Poprawiłem trochę twój skrypt bo brakowało średników

A po co średniki?
Go to the top of the page
+Quote Post
Tomplus
post
Post #5





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Cytat(wNogachSpisz @ 9.04.2011, 19:38:14 ) *
I bardzo dobrze, wszystkie butonny mają taką samą nazwę, więc brany ostatni w kolejności..
Czego innego byś chciał?


To że gdy uzytkownik ma wyłączoną obsługę JS to formularz będzie wysyłał informacje tylko guzika który został kliknięty, co jest prawidłowe i chciałem to samo przy pomocy obsługi JQuery (np. gdy kliknę guzik sie wyłączy, ale to potrafię)
Dlatego pobieranie value ostatniego buttona o tej samej nazwie nie dostarcza mi prawidłowych informacji.

Cytat(wNogachSpisz @ 9.04.2011, 19:38:14 ) *
A po co średniki?

hmm... kod ze średnikami lepiej wygląda, wiadomo gdzie się linijka kończy.
Go to the top of the page
+Quote Post
celbarowicz
post
Post #6





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

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


Może tak?
  1. function zapisz_klienta(){ $(document).ready(function(){ var zm1=$('#nazwisko').val();
  2. var zm2=$('#imie').val();
  3. var zm3=$('#pesel').val();
  4. var zm4=$('#oosobie').val();
  5. var data = 'a1='+zm1+'&'+'a2='+zm2+'&'+'a3='+zm3+'&'+'a4='+zm4;
  6. $.ajax({type:"POST",
  7. url:"zapisz_klienta.php",
  8. data: data,
  9. success: function(){ }
  10. });
  11. });
  12.  
  13.  
  14. }
  15.  



a w buttonie dajesz : <input type="button" name="zapisz_klienta" id="zapisz_klienta" onClick="zapisz_klienta()" value="Zapisz klienta">
Sprawdziłem i działa. Jak przesłać hurtowo dane z formularza?(IMG:style_emoticons/default/questionmark.gif) ?...

Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #7





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(Tomplus @ 9.04.2011, 19:56:47 ) *
To że gdy uzytkownik ma wyłączoną obsługę JS to formularz będzie wysyłał informacje tylko guzika który został kliknięty, co jest prawidłowe i chciałem to samo przy pomocy obsługi JQuery (np. gdy kliknę guzik sie wyłączy, ale to potrafię)
Dlatego pobieranie value ostatniego buttona o tej samej nazwie nie dostarcza mi prawidłowych informacji.

Fakt że dajesz więcej niż jeden submit zdradza błąd natury projektowej i powinieneś przemyśleć na nowo strukturę formularza, tak by nie trzeba było rzeźbić.

Cytat(Tomplus @ 9.04.2011, 19:56:47 ) *
hmm... kod ze średnikami lepiej wygląda, wiadomo gdzie się linijka kończy.

Wg mnie jest dokładnie odwrotnie, kod bez średników wygląda lepiej.
Na prawde potrzebujesz średnika żeby określić gdzie kończy się linia?
W zeszycie do Języka polskiego też wstawiasz średniki na końcu każdego wiersza?
Ciekaw jestem co na to Twoj nauczyciel (IMG:style_emoticons/default/happy.gif)
Go to the top of the page
+Quote Post
Tomplus
post
Post #8





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


u mnie nie śmiga ten kod,

dla testów po wysłaniu do alert(data) skrypt zapiszdane.php drukuje mi wszystkie _POST funkcją print_r($_POST), szybko widzę co po kliknięciu submit mi się wysyła, a co wysyla mi się bez jQuery.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #9





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Pytanie brzmi:
Czy nie prościej zrobić ten formularz bez elementów typu button?
Go to the top of the page
+Quote Post
Tomplus
post
Post #10





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Cytat(wNogachSpisz @ 9.04.2011, 20:15:56 ) *
Fakt że dajesz więcej niż jeden submit zdradza błąd natury projektowej i powinieneś przemyśleć na nowo strukturę formularza, tak by nie trzeba było rzeźbić.


Architektura jest dobra.

Jeżeli bez użycia JS mam tablicę o

array (
par = 1416,
r1 = array (
1416 => on
),
)

to są dane w postaci które potrzebuje do wykorzystania.
a ja potrzebuje tylko pomoc w pobraniu danych z buttona który zawiera informacje, a jego nazwa również jest tablicą.

czyli mam dane:
  1. <button type='submit' name='par' value='1416'>Wyslij</button>
  2. <button type='submit' name='par' value='1466'>Wyslij</button>
  3. <button type='submit' name='par' value='2010'>Wyslij</button>


ale w innym miejscu są już dane:

  1. <button type='submit' name='par[1]' value='1416'>Wyslij</button><button type='submit' name='par[2]' value='1416'>Wyslij</button><button type='submit' name='par[3]' value='1416'>Wyslij</button>
  2. <button type='submit' name='par' value='1466[1]'>Wyslij</button><button type='submit' name='par[2]' value='1466'>Wyslij</button><button type='submit' name='par[3]' value='1466'>Wyslij</button>
  3. <button type='submit' name='par[1]' value='2010'>Wyslij</button><button type='submit' name='par[2]' value='2010'>Wyslij</button><button type='submit' name='par[3]' value='2010'>Wyslij</button>

i mam macierz, kliknięty button ma wysłać do skryptu dane które są tablicą lub zwykłą zmienną, ale to nie jest wazne, bo skrypt przetwarza prawidłowo dane jeżeli są wysłane bez JQuery


Więc potrzebuje wysłać to co jest w NAME i VALUE, tak jak to się dzieje z INPUT RADIO

Cytat( @ 9.04.2011, 20:15:56 )
Wg mnie jest dokładnie odwrotnie, kod bez średników wygląda lepiej.
Na prawde potrzebujesz średnika żeby określić gdzie kończy się linia?
W zeszycie do Języka polskiego też wstawiasz średniki na końcu każdego wiersza?
Ciekaw jestem co na to Twoj nauczyciel (IMG:style_emoticons/default/happy.gif)

bez przesady.. ale to jest przyzwyczajenie z pisania kodu w PHP.



Cytat(wNogachSpisz @ 9.04.2011, 20:27:18 ) *
Pytanie brzmi:
Czy nie prościej zrobić ten formularz bez elementów typu button?

Ale jak napisałem, przy zastosowaniu INPUT type='submit' też nie wysyła danych, więc na jedno wychodzi.

A dlaczego stosuje BUTTON ? Dlatego że umożliwia mi wyświetlenie treści innej niż wartości guzika.
Fakt móglbym zastosować INPUT HIDDEN oraz INPUT SUBMIT
ale po co ? skoro HTML umożliwia skrócenie tego zapisu do jednego tagu.


Ten post edytował Tomplus 9.04.2011, 19:39:41
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #11





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(Tomplus @ 9.04.2011, 20:35:49 ) *
ale po co ? skoro HTML umożliwia skrócenie tego zapisu do jednego tagu.

Z bardzo prostej przyczyny, jQuery nie radzi sobie z serializowaniem takiego formularza.
Go to the top of the page
+Quote Post
Tomplus
post
Post #12





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Cytat(wNogachSpisz @ 9.04.2011, 20:42:26 ) *
Z bardzo prostej przyczyny, jQuery nie radzi sobie z serializowaniem takiego formularza.


Jeżeli tak to jeszcze sobie nie radzi, ale chyba są sposoby aby to ominąć ?
bo jakoś wierzyć mi się nie chce że nie ma możliwości w jQuery pobrania zmiennych z tagu.
Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #13





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(Tomplus @ 9.04.2011, 20:47:31 ) *
Jeżeli tak to jeszcze sobie nie radzi, ale chyba są sposoby aby to ominąć ?

Są, tylko po co rzeźbić?
Nie prościej utworzyć prawidłowy formularz?

Cytat(Tomplus @ 9.04.2011, 20:47:31 ) *
bo jakoś wierzyć mi się nie chce że nie ma możliwości w jQuery pobrania zmiennych z tagu.

Czymkolwiek są "zmienne z tagu", znajdzie się sposób aby przy pomocy javascript się do tego dobrać.

Aha i jeszcze jedno:

Kod
If you use the button element in an HTML form, different browsers will submit different values. Internet Explorer will submit the text between the <button> and </button> tags, while other browsers will submit the content of the value attribute. Use the input element to create buttons in an HTML form.


Czytaj: Twój fantastyczny formularz nie działa pod Internet Explorerem..
Czy to już wystarczy abyś dał sobie spokój, czy trzeba Ci przedstawić jeszcze więcej powodów?
Go to the top of the page
+Quote Post
Tomplus
post
Post #14





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Ale pod którą wersją IE ? 6.0 ?

Go to the top of the page
+Quote Post
wNogachSpisz
post
Post #15





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(Tomplus @ 10.04.2011, 22:25:27 ) *
Ale pod którą wersją IE ? 6.0 ?

Pod każdą.
Go to the top of the page
+Quote Post
Tomplus
post
Post #16





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

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


Powyższego skryptu nie sprawdzałem, ale sprawdzałem poniższy kod dla formularza powyższego i nie działa tylko dla IE 6.
tzn. działa, ale trzeba zrobić pare korekt specjalnie dla tej przeglądarki, dla innych, IE 7, FF 3 i wyżej, Opera 9 i wyżej i Chrome 11 - działa tak jak nalezy. Sam testowałem.

Po drugie przedstawię rozwiązanie problemu od użytkownika kbwood, ale ja zmodyfikowałem dostosowując do mojego problemu (dokladnie to co związane jest z valueButton).
Mam nadzieję że pomogę chociaż trochę innym użytkownikom które borykają się z podobnym problemem.

  1. $(document).ready( function(){
  2. var submitButton = '';
  3. var valueButton = '';
  4. $('#ZapiszDane button').click(function() {
  5. submitButton = $(this).attr('name');
  6. valueButton = $(this).attr('value');
  7. });
  8. $('#ZapiszDane').submit(function() {
  9. var params = $(self).serialize() + '&' + submitButton + '=' + valueButton;
  10. $.post('zapiszdane.php', params, function(data) {
  11. alert(data);
  12. });
  13. return false;
  14. });
  15. })


A oto oczekiwany wynik po kliknieciu:
(IMG:http://www.image-share.com/upload/596/91.gif)

Dziękuje za uwagę (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 18:14