Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Button zmienia wartość drugiego buttona
Forum PHP.pl > Forum > XML, AJAX
marianexyx
Mam 2 buttony. Gdy zostaje wciśnięty button "black_player" jego wartość zmienia się na wartość z bazy. Tą zmianę widzę. Gdy wciskam drugi button "stand_up" wartość pierwszego zmienia się w bazie i na stronie na inną, ale muszę ręcznie odświerzyć stronę, by tą zmianę zobaczyć. Co zrobić by po kliknięciu drugiego buttonu wartość pierwszego zmieniła się automatycznie- bez przeładowywania strony? Czy droga którą tu idę jest dobra?

Poniżej jest poucinany kod, nie powinno być z nim komplikacji, jeżeli chodzi o jego zrozumienie. Jak coś będzie mocno niejasne, to wrzucę nieokrojony kod.

index:
  1. <input type="button" id="black_player" value="'.$player['black_player_name'].'" /> <!-- $player- funkcja z zapytaniem do bazy o nazwę gracza -->
  2. <input type="button" id="stand_up" value="Wstań" >
  3.  
  4. $(document).ready(function(){
  5. $("input#black_player").click(function(){
  6. $.ajax({
  7. type: "POST",
  8. url: "ajax_black.php",
  9. data: {
  10. czyCzarnyZajety: "<? echo $player['is_black_taken'] ?>",
  11. loginUzytkownika: "<? print $user['login'] ?>"
  12. },
  13. success: function(data) {
  14. $("input#black_player").val(data);
  15. }
  16. });
  17. });
  18. });
  19.  
  20. $(document).ready(function(){
  21. $("input#stand_up").click(function(){
  22. $.ajax({
  23. type: "POST",
  24. url: "ajax_leave.php",
  25. data: {
  26. pobierzNickCzarnego: "<? echo $player['is_black_taken'] ?>",
  27. loginUzytkownika: "<? print $user['login'] ?>"
  28. },
  29. contentType: "application/json",
  30. dataType: "text",
  31. success: function(data) {
  32. if (data == "Czarne"){
  33. $("input#black_player").val(data);
  34. }
  35. }
  36. });
  37. });
  38. });


ajax_black.php:
  1. <?
  2. require_once('inc.php');
  3.  
  4. $isBlackTaken = vtxt($_POST['czyCzarnyZajety']);
  5. $loginUzytkownika = vtxt($_POST['loginUzytkownika']);
  6.  
  7. if ($isBlackTaken == 0){
  8. call("UPDATE chess SET black_player_name = '$loginUzytkownika' WHERE 1");
  9. echo $loginUzytkownika;
  10. }
  11. ?>


ajax_leave.php:
  1. <?
  2. require_once('inc.php');
  3.  
  4. $getBlackPlayer = vtxt($_POST['pobierzNickCzarnego']);
  5. $loginUzytkownika = vtxt($_POST['loginUzytkownika']);
  6.  
  7. if($getBlackPlayer == $loginUzytkownika ){
  8. call("UPDATE chess SET black_player_name='Czarne' WHERE 1");
  9. echo 'Czarne';
  10. }
  11. ?>
  12.  
Felan
Cześć,

na początek uwaga: staraj się być bardziej konsekwentny w nadawaniu nazw - tu masz angielską nazwę, tam polską i trudno się w tym nie pogubić. Kod w stylu: "$('#przycisk').html('<?php echo $button_value; ?>');" nie wygląda najlepiej.

Wygląda na to, że nie dostajesz poprawnych danych z ajax_leave.php.

W drugim $.ajax spróbuj całkowicie wyrzucić:
  1. contentType: "application/json",


Jeśli to nie pomoże, upewnij się, że do php dociera prawidłowy input w $_POST - w tym celu możesz w $.ajax ustawić pod "success:" coś w tym stylu:
  1. function(data) {
  2. alert(data);
  3. }

I w ajax_leave.php:
  1. var_dump($_POST);
  2. die();

- taki szybki ręczny debug.
marianexyx
Dzięki za rady. Pierwszy raz programuję w sieci i robię wiele rzeczy "na czuja".

W każdym razie z tego co piszesz rozumiem, że to powinno działać i nie potrzeba żadnych dodatkowych funkcji odświerzających, a błąd jest gdzieś w tym co aktualnie mam?
Felan
Nie, jQuery z założenia nie wymaga żadnego odświeżania - .val('value') nadaje 'value' jako wartość od razu po odnalezieniu wskazanego przez ciebie elementu. Stara wartość "znika" i widać już tylko nową.

Powinno działać. Tylko koniecznie wyrzuć
  1. contentType: "application/json",
- używając go będziesz zawsze miał pustą tablicę $_POST, bo nic do niej nie dotrze. Po wyrzuceniu tej linii wartość contentType ustawi się automatycznie na 'application/x-www-form-urlencoded', co jest prawidłową wartością w twoim przypadku.
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-2024 Invision Power Services, Inc.