Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP] json wysyłanie formularza
Forum PHP.pl > Forum > Przedszkole
uncuncunc
Może mi ktoś wyjaśnić dlaczego ten kod nie działa? Formularz nie zostaje wysłany przez ajax w jQuery:

[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function()
  2. {
  3. $('form').bind('submit', function()
  4. {
  5.  
  6. var login = $('#login').val();
  7. var haslo = $('#password').val();
  8.  
  9. $.post("http://localhost/", { 'login': login , 'password': haslo },
  10. function(data)
  11. {
  12. alert(data.efekt);
  13. }, "json");
  14.  
  15.  
  16. return false;
  17.  
  18. });
  19. });
[JAVASCRIPT] pobierz, plaintext


  1. <?php
  2. function is_ajax()
  3. {
  4. if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == "XMLHttpRequest")
  5. {
  6. return true;
  7. }
  8. return false;
  9. }
  10.  
  11.  
  12. if(isset($_POST['send_form']))
  13. {
  14. if(is_ajax())
  15. {
  16. $arr = array('efekt'=> 'zxc');
  17. echo json_encode($arr);
  18. }
  19. }
  20.  
  21. ?>


  1. <form method="post" action="#">
  2. <div>
  3. <label for="login">l:</label>
  4. <input type="text" name="login" id="login" value="" autofocus="autofocus" />
  5. </div>
  6.  
  7. <div>
  8. <label for="password">p:</label>
  9. <input type="password" name="password" id="password" value="" /><br />
  10. </div>
  11.  
  12. <div>
  13. <button type="submit" name="send_form" >wyslij</button>
  14.  
  15. </div>
  16. </form>
Kostek.88
Z tego co się orientuję, w większości aplikacji powinna być podana dokładna ścieżka do skryptu, a Ty dałeś tylko:

"http://localhost/"

PS. co to jest?
  1. $arr = array('efekt'=> 'zxc');
  2. echo json_encode($arr);


Przecież to nie są dane z formularza.

Aha, zamiast alert używaj console.log , jest o wiele wygodniejsza, możesz badać obiekty, tablice itd.

JS wygląda dobrze moim zdaniem, nie jestem pewien co do PHP.

EDIT: dobra, rozumiem po co ten kod PHP wyżej - dla testu. OK, a więc...

1) zmień

  1. <button type="submit" name="send_form" >wyslij</button>


na

  1. <input type="hidden" name="send_form" value="" />
  2. <input type="submit" value="wyslij" / >


jeśli nie zadziała, to:

2) Sprawdź PHP, tzn. umieść w skrypcie jedynie:
  1. $arr = array('efekt'=> 'zxc');
  2. echo json_encode($arr);


Potem dla pewności odpal najpierw skrypt bezpośrednio przez przeglądarkę.

jeśli dalej nie będzie działać, to:

3) zamień
  1. alert(data.efekt);


na

  1. console.log(data);


I zobacz, jakie dane Ci wyrzuca (oczywiście w konsoli, możesz zainstalować Firebug albo użyć wewnętrznej konsoli dostępnej w chyba każdej nowej przeglądarce)

4) Chociaż zapis ten

  1. $('form').bind('submit', function()


jest prawidłowy, ja używałem:

  1. $('form').submit(function()



5) Sprawdź, czy na pewno masz lub dobrze zainkludowałeś bibliotekę jQuery wink.gif
uncuncunc
Cytat(Kostek.88 @ 26.04.2012, 00:06:56 ) *
PS. co to jest?
  1. $arr = array('efekt'=> 'zxc');
  2. echo json_encode($arr);


Przecież to nie są dane z formularza.


Dane zwaracane przez php spowrotem do js. Podałem całą ścieżkę do pliku i nic.


Zamieniłem, konsola niczego nie zwraca. tzn, nie ma błędów nic. a zapytanie zwraca cały kod strony.
Kostek.88
OK, już rozumiem po co, zastanawiałem się tylko po co Ci dane 'zxc', skoro wysyłasz login i hasło wink.gif PS. Odśwież stronę, bo dopisałem coś do posta. Poza tym dalej nie wiemy czy problem leży po stronie PHP, czy JS. Wiemy tylko, że "nie działa". Ale co dokładnie, to nie wiadomo.
uncuncunc
wysyłam login i hasło DO PHP, a odbieram 'zxc' w JS, zxc to tylko test, równie dobrze możę być to true i przekierowanie w JS zrobione...

Heh jQuery nie może się odwoływać do tego samego pliku w którym jest wykonywany? Bo to chyba główny powód.

Edycja:

Heh, zamiast .post() musiałem użyć .ajax() ... wygląda że .post ma jakieś braki w jquery i nie działa poprawnie. Sprawdzę to jeszcze dokładnie czy działa w FW.
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.