Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Button zmienia wartość drugiego buttona, ale muszę odświerzyć całą stronę, by to sprawdzić
marianexyx
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.03.2015

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


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.  
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Felan
post
Post #2





Grupa: Zarejestrowani
Postów: 10
Pomógł: 6
Dołączył: 30.11.2006

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


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.
Go to the top of the page
+Quote Post
marianexyx
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.03.2015

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


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?
Go to the top of the page
+Quote Post
Felan
post
Post #4





Grupa: Zarejestrowani
Postów: 10
Pomógł: 6
Dołączył: 30.11.2006

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


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.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 11:51