Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]+[AJAX]+[PHP] Jak przesłać dane z JS do PHP przy pomoxy AJAX'a
Forum PHP.pl > Forum > Przedszkole
sooper
Dzisiaj coś łatwego biggrin.gif

Mamy 2 pliki:

1. HTML (index.html)

  1. <head>
  2. <title>Tytuł</title>
  3. <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
  4. <script type="text/javascript">
  5. $(document).ready(function(){
  6. $('input[type=submit]').click(function(){
  7. $.ajax({
  8. type:"POST",
  9. url:"test.php",
  10. dataType: "text",
  11. data: {'a':'b'},
  12. success: function(data){
  13. $('#wynik').text(data);
  14. },
  15. error: function(){
  16. alert('Jakiś błąd');
  17. }
  18. });
  19. });
  20. });
  21. </script>
  22. </head>
  23. <body>
  24. <input type="submit" value="Wyslij" /><br />
  25. <div id="wynik"></div>
  26. <a href="test.php">Link do php</a>
  27. </body>
  28. </html>



Drugi php (test.php)

  1. <?php
  2. if(isset($_POST["a"]))
  3. {
  4. echo "Działa";
  5. }
  6.  
  7.  
  8. echo "zzz";
  9. ?>



Czy w taki sposób przesyła się dane z JS do PHP ?
Dlaczego po przejściu do test.php zmienna $_POST["a"] jest pusta ?
Po wciśnięciu submit w html wyświetla wszystko z PHP. Skrypt ma przesyłać dane z JS do PHP a tu chyba jest odwrotnie :/


zdemotywowany
http://www.w3schools.com/ajax/ajax_aspphp.asp
sooper
OK zrobiłem coś takiego:

HTML

  1. <meta charset="utf-8" />
  2. <title>xxx</title>
  3.  
  4.  
  5. <script type="text/javascript"><!--
  6. $(document).ready(function() {
  7. $('#crs').submit(function() {
  8.  
  9. var nm = $('#crs #nm').val();
  10.  
  11. $.ajax({
  12. type: 'post',
  13. url: 'script.php',
  14. data: nm,
  15. beforeSend: function() {
  16.  
  17. $('#resp').html('Loading...');
  18. },
  19. timeout: 10000,
  20. error: function(xhr, status, error) { alert('Error: '+ xhr.status+ ' - '+ error); },
  21. success: function(response) { $('#resp').html(response); }
  22. });
  23.  
  24. return false;
  25. });
  26. });
  27. --></script>
  28.  
  29. </head>
  30. <div id="resp"></div>
  31.  
  32. <form action="script.php" method="post" id="crs">
  33.  
  34. Name: <input type="text" name="nm" id="nm" /><br />
  35.  
  36. <input type="submit" value="submit" />
  37. </form>
  38. </body>
  39. </html>



PHP
  1. <?php
  2.  
  3. if(isset($_POST['nm']) )
  4. {
  5.  
  6. $nm = $_POST['nm'];
  7.  
  8. $rehtml = '<h4>Hy '. $nm. '</h4>';
  9.  
  10. }
  11. else $rehtml = 'Invalid data';
  12.  
  13. echo $rehtml; // output (return) the response
  14.  
  15.  
  16. ?>



Problem w tym, że zamiast (<input type="text" name="nm" id="nm" /><br />) muszę mieć (<div id="nm">wartosc_wygenerowana_przez_js</div>)
zdemotywowany
Chcesz wyświetlić to w inpucie?
sooper
Nie.

1. Javascript generuje mi jakąś wartość np 2. [val = '2';]

2. Przy pomocy (document.getElementById('iddiv').innerHTML = val;) wartość pojawia się w divie.

3. Chciałbym za pomocą AJAXA przekazać to do php. Bo z poziomu php chyba nie można odczytać wygenerowanej wartości div'a questionmark.gif
zdemotywowany
1. Po losowanie odsyłam do Google'a.
2. Drugie chyba wiesz jak.
3. Jest na tej stronce co dałem wszystko.
Następnie JS odczytuje (wystarczy skopiować tamten przykład i zmienić wartość zmiennej) i wyświetla w div'ie.
sooper
Cytat(zdemotywowany @ 19.01.2012, 20:20:42 ) *
1. Po losowanie odsyłam do Google'a.
2. Drugie chyba wiesz jak.
3. Jest na tej stronce co dałem wszystko.
Następnie JS odczytuje (wystarczy skopiować tamten przykład i zmienić wartość zmiennej) i wyświetla w div'ie.



Może nieprecyzyjnie się wyraziłem, ale mam zrobione 'losowanie', wiem jak wynik wstawić do diva, ale nie wiem jak jego wartość przesłać do php przy pomocy submit.

Mam formularz:

  1. <form action="script.php" method="post" id="crs">
  2.  
  3. <input type="text" name="nm" id="nm" />
  4. <input type="text" pass="ps" id="ps" />
  5.  
  6. <div name="di" id="di">{WARTOŚĆ WSTAWIONA PRZEZ JS}</div>
  7.  
  8. <input type="submit" value="submit" />


Wartości z inputów są oczywiście wysyłane, a z diva niestety nie.

Byłem na stronce, którą podałeś i są tam przykłady zapytań do php przy pomocy ajaxa, a mi nie oto chodzi, tylko jak wysłać submitem wartość z diva do php smile.gif

zdemotywowany
Tam nie może być submit a button to po pierwsze.
Po drugie korzystasz z funkcje getElementByID i wyciągasz dane z div'a. I w końcu na tej stronce masz jak je wysłać. I teraz już te przykłady na pewno będą pomocne.

EDIT: Jeszcze raz przeczytałem Twój post i nie wiem czy chcesz je wysłać AJAX'em czy nie. Mógłbyś się zdecydować.
sooper
To może napiszę do czego dążę, będzie chyba prościej dojść, jakiej metody lepiej użyć.


Załóżmy że mam formularz logowania, taki jak jest na tym forum.
Składa się on z 2 inputów ( Nazwa oraz hasło użytkownika)

  1. <input type="text" name="nazwa" id="nazwa" />
  2. <input type="text" name="haslo" id="haslo" />


Chciałbym do tego formularza dodać diva, gdzie jego wartość będzie generowana przez JS (generowanie mam już zrobione)

  1. <div name="test" id="test>{WARTOŚĆ Z JS}</div>


i na końcu wysłać wszystko submitem

  1. <input type="submit" value="submit" />


Po stronie php wartości z inputów odczytamy za pomocą $_POST[]

Jak odczytać wartość DIVA questionmark.gif

Mam nadzieje że teraz jest już jasne smile.gif
d3ut3r
być może łatwiej zamiast DIV użyć po prostu:

  1. <input type="hidden" name="cosik" value="wartosc_z_js" />


wtedy po kliknięciu submit skrypt php prócz loginu i hasła będzie mógł odebrać również wartość zmiennej $_POST['cosik']
zdemotywowany
Cytat(sooper @ 19.01.2012, 22:07:00 ) *
Jak odczytać wartość DIVA questionmark.gif


Temat mówi co innego... Z resztą Twoje posty też. Tak więc div'a nie prześlesz do php (albo może i prześlesz, ale się troszkę pomęczysz). Musisz tak jak kolega wyżej napisał wstawić to w inputa, którego nie będzie widać, a zostanie wysłany razem z formularzem.
sooper
Na chwilę obecną wysyłanie mam zrobione przez ukryty input, jednak taki input da się odkryć i zmienić jego wartość, dlatego myślałem od divie. Ogólnie doczytałem się, że właśnie ajaxem uda się wysłać wartości z js do php, dlatego pytałem jak to zrobić. Widocznie się nie zrozumieliśmy.

Gdyby jednak komuś przyszedł do głowy jakiś pomysł na wysłanie wartości przez diva lub za pomocą czegoś innego oprócz inputa, proszę pisać.

Kod
$(document).ready(function(){
$('input[type=submit]').click(function(){
$.ajax({
type:"POST",
url:"test.php",
dataType: "text",
data: {'a':'b'},
success: function(data){
$('#wynik').text(data);
},
error: function(){
alert('Jakiś błąd');
}
});
});
});


Dalej jednak nie wiem dlaczego ten skrypt nie działa. Wyraźnie jest napisane, że po akcji SUMBIT wartości powinny zostać wysłane i odczytane za pomocą $POST[]

zdemotywowany
Tak, AJAX'em możesz wysłać cały formularz bez przeładowania strony, div'a też możesz wysłać.
d3ut3r
Cytat
jednak taki input da się odkryć i zmienić jego wartość


również można zmodyfikować całe zapytanie dlatego to po stronie php robi się walidację danych ponieważ to co do skryptu php jest wysyłane user może dowolnie modyfikować i umieszczenie tekstu w div nie poprawi w żadnym stopniu bezpieczeństwa skryptu.
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.