Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][JavaScript][PHP]Problem z transferem danych
Forum PHP.pl > Forum > Przedszkole
castagir
Witam

Chciałbym przesłać dane z JS do php. Próowałem to robić zwykłą metodą GET, POST a nawet próbowałem AJAX. Niestety nic. Próbowałem napisać to na podstawie przykładów z książki i z internetu

Tutaj jest treść:

Metoda GET:
  1. /* Załadowanie wszystkich funkcji i utworzenie zmiennych przechowujących informację o postępach instalacji */
  2. $(document).ready(function() {
  3. var postep;
  4. rozpocznijInstalacje();
  5. });
  6.  
  7. /* Funkcje niezbędne do przeprowadzenia dynamicznej instalacji ENDO */
  8. function rozpocznijInstalacje() {
  9. $('.rozpocznij').click(function() {
  10. var postep = 'krok1';
  11. $.get (
  12. "instalator.php",
  13. { postep: postep},
  14. function(data) {
  15. $('#pojemnikGlowny').html(data);
  16. }
  17. );
  18. });
  19. }

Sposób AJAX:
  1. /* Załadowanie wszystkich funkcji i utworzenie zmiennych przechowujących informację o postępach instalacji */
  2. $(document).ready(function() {
  3. var postep;
  4. rozpocznijInstalacje();
  5. });
  6.  
  7. /* Funkcje niezbędne do przeprowadzenia dynamicznej instalacji ENDO */
  8. function rozpocznijInstalacje() {
  9. $('.rozpocznij').click(function() {
  10. var postep = 'krok1';
  11. $.ajax ({
  12. type :"GET",
  13. url :"instalator.php",
  14. data :{
  15. postep: postep
  16. },
  17. complete(dane) {
  18. $('#pojemnikGlowny').html(dane);
  19. }
  20. });
  21. });
  22. }

Fragment kodu php, który ma przechwycić dane:
  1. // proces instalacji - otrzymywanie i zwracanie odpowiednich danych ze wzgledu na otrzymaną informacje, który krok jest właśnie wykonywany
  2. if($_GET['postep'] == 'krok1') {
  3. echo '<h1>Instalacja ENDO</h1><br />
  4. <h3>Krok 1.</h3>';
  5. }


Nie mam pojęcia co mogłem zrobić źle.
Z góry dziękuję za pomoc smile.gif
ilidir
jezeli korzystasz z AJAXA to faktycznie wysyłasz swój "postep" odbierasz go w pliku instalator.php ale w żaden sposób wyniku czyli swojego ECHO nie wysyłasz spowrotem do Ajaxa smile.gif

poczytaj sobie artykuł Temat: JavaScriptMySQLPHP dynamiczne uzupelnianie - podałem tam swój przykład wykorzystania AJAX-a wraz z opisami.
castagir
Czyli uważasz, że powinienem odsyłać dane JSON'em? Bo nie rozumiem.

Gdy robiłem ćwiczenia z książki odsyłałem po prostu jako kod html i wszystko było dobrze. Nie rozumiem dlaczego teraz mi nic nie działa.
ilidir
pytasz jak zorbić to AJAXEM więc ci pomagam smile.gif
castagir
Przepraszam. Zielony jeszcze jestem w JS.

Mógłbyś pokazać jak powinien wyglądać przykładowy skrypt PHP, który byłby odpowiedzialny za odesłanie danych?
ilidir
tak jak jest to pokazane na przykładzie który ci wysłałem. Przypisujesz na przykład to co chcesz do zmiennej i przesyłasz jsonem.
castagir
Mam coś takiego. Jest na pewno źle, bo na stronie nadal nic nie rusza.

  1. if($_GET['postep'] == 'krok1') {
  2. $tresc = '<h1>Instalacja ENDO</h1><br />
  3. <h3>Krok 1.</h3>';
  4. echo json_encode($tresc);
  5. }
ilidir
no a jak odbierasz te dane smile.gif pokaż kod nie będe wróżył z fusów.
castagir
Nic się nie zmieniło. Ciągle ten sam kod js

  1. /* Załadowanie wszystkich funkcji i utworzenie zmiennych przechowujących informację o postępach instalacji */
  2. $(document).ready(function() {
  3. var postep;
  4. rozpocznijInstalacje();
  5. });
  6.  
  7. /* Funkcje niezbędne do przeprowadzenia dynamicznej instalacji ENDO */
  8. function rozpocznijInstalacje() {
  9. $('.rozpocznij').click(function() {
  10. var postep = 'krok1';
  11. $.ajax ({
  12. type :"GET",
  13. url :"instalator.php",
  14. data :{
  15. postep: postep
  16. },
  17. complete(dane) {
  18. $('#pojemnikGlowny').html(dane);
  19. }
  20. });
  21. });
  22. }
trueblue
complete: function(dane) {
ilidir
tutaj masz mój przykład wysyłania i odczytywania danych przesłanych przez json wystarczy go przerobić

  1. $.ajax({
  2. type: "POST",
  3. url: "wiad_ajax.php",
  4. dataType : 'json',
  5. data: {
  6. dana1 : miasto, //przypisanie zmiennych dowysylki
  7. dana2 : wybor,
  8. },
  9. success : function(json) {
  10. document.getElementById('div_rk_id').style.display="block"; //odblokowujemy widocznosc div rk
  11. var select_success = document.getElementById('select_rk_id'); //przypisanie do zmiennej wartosci elementu
  12. for (i=0;i<=json.length;i++)
  13. {
  14. var option_success = document.createElement("option"); //tworzymy obiekt option
  15. option_success.setAttribute("value", json[i]);
  16. option_success.text = ""+json[i]+""; //przypisujemy do niego odebrane wartosci z ajaxa
  17. select_success.appendChild(option_success); //dodanie stworzonego optiona do select
  18. }
  19. },
  20. error : function(error) {
  21. alert("Jest klops");
  22. }
  23. });


Proponuje ci jeszcze jeżeli tego nie masz to instalację FIRebuga w przegladarce on pokazeci co otrzymujesz i co wysyłasz AJAXEM smile.gif
castagir
Dobra. Jakoś się zmieniają elementy na stronie. Reaguje po naciśnieciu na przycisk, tylko jest problem taki, że nic się nie pokazuje. Tak jakby php nic nie odsyłało.


Co do tego skryptu JS to nie chce tego używać, bo chcę zrobi stronę bazującą tylko na jQuery.
Poza tym z takim skryptem przestaje nawet strona reagować:
  1. /* Załadowanie wszystkich funkcji i utworzenie zmiennych przechowujących informację o postępach instalacji */
  2. $(document).ready(function() {
  3. var postep;
  4. rozpocznijInstalacje();
  5. });
  6.  
  7. /* Funkcje niezbędne do przeprowadzenia dynamicznej instalacji ENDO */
  8. function rozpocznijInstalacje() {
  9. $('.rozpocznij').click(function() {
  10. var postep = 'krok1';
  11. $.ajax ({
  12. type :"GET",
  13. url :"instalka.php",
  14. data :{
  15. postep: postep
  16. },
  17. complete: function(dane) {
  18. var pojemnik = document.getElementById('pojemnikGlowny');
  19. pojemnik.innerHtml = dane;
  20. }
  21. });
  22. });
  23. }


Sądzę, że problem leży w php.
Co do firebug, mam go zainstalowanego ale w nim nie mogę znaleść tego co wysyła php, więc to na pewno wina php.
ilidir
jak rozumiem sprawdzałeś w firebugu pod opcją - > konsola questionmark.gif? i nic nie zwraca ?
castagir
Dobra, ten problem udało mi się rozwiązać, wkradła się literówka smile.gif
Lecz nic dalej.

Teraz już wiem. Nie wiem dlaczego, ale to co mi odsyła php zostaje zapisane poza html:

  1. <!DOCTYPE html>
  2. <title>ENDO - instalacja</title>
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  4. <link rel="stylesheet" type="text/css" href="./css/style.css" />
  5. <script type="text/javascript" src="../jquery.js"></script>
  6. <script type="text/javascript" src="js_instalator.js"></script>
  7. </head>
  8. <img src="./css/logo_endo_duze.png" />
  9. <div id="pojemnikGlowny">
  10. <h1>Instalacja ENDO</h1><br />
  11. <p>Dziękujemy za wybranie naszej aplikacji do stworzenia swojej strony! ENDO jest aplikacją CMS umożliwiającą stworzenie portalu informacyjnego lub tematycznego, który zawiera w sobie takie moduły jak:
  12. <ul>
  13. <li>rejestracja kont użytkowników z rozbudowanym edytowalnym profilem</li>
  14. <li>wewnętrzna poczta, dla lepszej komunikacji między użytkownikami</li>
  15. <li>przeglądanie artykułów oraz edytor do ich pisania i redagowania</li>
  16. <li>rozbudowane forum z różnymi stopniami dostępu dla odwiedzających</li>
  17. <li>rozbudowany panel administratorski do pełnej kontroli nad witryną</li>
  18. <li>wewnętrze forum tylko dla administratorów</li>
  19. </ul></p>
  20. <input type="button" class="rozpocznij" value="Rozpocznij instalację" /></div>
  21. </body>
  22. </html><h1>Instalacja ENDO</h1><br />
  23. <h3>Krok 1.</h3>
ilidir
szczerze mówiąc teraz to ja nie wiem o co chodzi smile.gif - sory
castagir
no nic. Dzieki za pomoc. Będę dalej kombinował biggrin.gif
ilidir
znaczy się ja nie rozumiem tego co napisałeśsmile.gif
castagir
Chodzi o ten fragment:

  1. </body>
  2. </html><h1>Instalacja ENDO</h1><br />
  3. <h3>Krok 1.</h3>


To powinno być w div'ie o id="pojemnikGlowny", a zamiast tego, pokazuje się to za znacznikiem zamykajacym </html>

PHP odsyła to co trzeba. Problemem jest teraz to, dlaczego JS nie wstawia otrzymanych danych do diva. Próbowałem także z append i efekt ten sam, tyle, ze poprzednia tresc nie zostaje skasowana.
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.