Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [advAJAX] onSuccess ...
umatik
post 22.09.2007, 14:49:11
Post #1





Grupa: Zarejestrowani
Postów: 209
Pomógł: 0
Dołączył: 17.05.2002
Skąd: lodz

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


Kod
function getClubName(club){
    var nazwa ="a"
    advAJAX.get({
        url: "getclubname.php",
        parameters : {
          "id" : club
        },
        onSuccess : function(obj) { nazwa = obj.responseText},
        onError : function(obj) { alert("Error: " + obj.status); }
    });
    return nazwa;
    }


pobieranie nazwy klubu dziala bez problemu ale nie wiem dlaczego zmienna "nazwa" nie zmienia wartosci na to z "obj.responseText" ?

ps jest to moja pierwsza zabawa z advajaxem...
Go to the top of the page
+Quote Post
msulik
post 27.09.2007, 08:13:20
Post #2





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

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


W momencie wywołania advAJAX.get() sterowanie zostaje natychmiast zwrócone, inaczej mówiąc, metoda get() wykonuje się w tle. Tak więc po wywołaniu advAJAX.get() od razu zostaje wykonane return nazwa, a samo ajaksowe pobieranie może zakończyć się później. Nie wiem, co zamierzasz zrobić z tą pobraną wartością - jeśli chcesz ją wstawić np do jakiegoś diva, wówczas powinieneś napisać coś w rodzaju:
Kod
        onSuccess : function(obj) { document.getElementById('mojdiv').innerHTML = obj.responseText; },


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
graft
post 22.10.2007, 17:02:21
Post #3





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 24.03.2007

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


Pozwolę się podpiąć pod temat, bo mam podobny problem.

Mój kod:
  1. <script type="text/javascript">
  2.  
  3.      $(document).ready(
  4.      
  5.      function()
  6.      {
  7.            $("#zapisz").click(
  8.            function()
  9.            {
  10.                  $.ajax({
  11.                  type: "GET",
  12.                  url: "zapisz.php",
  13.                  success: function(){
  14.                  $("#element").html("nowa_wartosc_z_bazy");
  15.                  }
  16.                  });
  17.                  return false;
  18.            });
  19.      });
  20. </script>


nowa_wartosc_z_bazy - tu mam wstawiony kod PHP, który pobiera z bazy danych aktualną wartość.

W pliku zapisz.php modyfikuję pewną wartość w bazie.

Niestety, tak jak napisał ~msulik funkcja zostaje zwrócona zanim wykona się skrypt zapisz.php.
Jak temu zaradzić? Żeby np. w moim #element pojawiło się coś w rodzaju preloadera, i dopiero po wykonaniu zapisz.php wyświetlił mi:

$("#element").html("nowa_wartosc_z_bazy");

z nową wartością questionmark.gif

PS. Konstrukcja funkcji jest nieco inna bo używam jQuery.

Ten post edytował graft 22.10.2007, 17:03:49
Go to the top of the page
+Quote Post
msulik
post 24.10.2007, 09:06:17
Post #4





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

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


Najprościej będzie chyba tak:
  1. <script type="text/javascript">
  2.  
  3. $(document).ready(
  4.  
  5. function()
  6. {
  7. $("#zapisz").click(
  8. function()
  9. {
  10. $("#element").html("Czekaj - ładuję dane...");
  11. $.ajax({
  12. type: "GET",
  13. url: "zapisz.php",
  14. success: function(){
  15. $("#element").html("nowa_wartosc_z_bazy");
  16. }
  17. });
  18. return false;
  19. });
  20. });

Dodatkowo, aby zablokować możliwość kliknięcia w link "#zapisz", możesz użyć czegoś z grubsza w tym rodzaju (nie sprawdziłem tego, ale raczej będzie działać):
  1. <script type="text/javascript">
  2.  
  3. $(document).ready(
  4.  
  5. function()
  6. {
  7. $("#zapisz").click(
  8. function()
  9. {
  10. if ($("#zapisz").attr('nieklikalny'))
  11. {
  12. return false;
  13. }
  14. $("#zapisz").attr('nieklikalny', true);
  15. $("#element").html("Czekaj - ładuję dane...");
  16. $.ajax({
  17. type: "GET",
  18. url: "zapisz.php",
  19. success: function(){
  20. $("#element").html("nowa_wartosc_z_bazy");
  21. $("#zapisz").attr('nieklikalny', false);
  22. }
  23. });
  24. return false;
  25. });
  26. });


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
graft
post 25.10.2007, 14:48:03
Post #5





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 24.03.2007

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


no niestety, nadal "nowa_wartosc_z_bazy" nie jest nową. Dopiero jak odświeżę stronę (F5) to zmianyt są widoczne.

nowa_wartosc_z_bazy ---> w tym miejscy mam wstawiony PHP z SELECT'em z bazy, ale funkcja najwyraźniej nie czeka na wykonanie zapisz.php

sciana.gif

PS. "Czekaj - ładuję dane..." - ładnie czeka, ale w efekcie wyświetla dane przed modyfikacją.

Ten post edytował graft 25.10.2007, 14:49:18
Go to the top of the page
+Quote Post
msulik
post 29.10.2007, 09:23:29
Post #6





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

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


Czy dobrze rozumiem, że masz coś takiego:
  1. ...
  2. $("#element").html("<?php cośtam(); ?>");
  3. ...
?


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
graft
post 30.10.2007, 23:03:03
Post #7





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 24.03.2007

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


Cytat(msulik @ 29.10.2007, 10:23:29 ) *
Czy dobrze rozumiem, że masz coś takiego:
  1. ...
  2. $("#element").html("<?php cośtam(); ?>");
  3. ...
?


Tak, w kodzie php łącze się z bazą, "próbuję wyciągnąć nowe dane" i daję echo z niewielką tabelką.
Wartości nie są jednak aktualne. Dopiero jak odświeżę stronę widać nowe.
Go to the top of the page
+Quote Post
msulik
post 30.10.2007, 23:21:03
Post #8





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

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


I tu jest pies pogrzebany. Zajrzyj sobie do źródła strony (Widok > Źródło). Ten kawałek:
Kod
<?php cośtam(); ?>
zostanie wygenerowany na serwerze. To są przecież podstawy PHP! winksmiley.jpg


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
graft
post 1.11.2007, 13:43:15
Post #9





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 24.03.2007

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


no właśnie to jest cały czas moim problemem.

plik zapisz.php modyfikuje moją bazę

  1. $("#element").html("<?php echo "w jaki sposób tu pobrać nowe dane z bazy po modyfikacji przez zapisz.php"; ?>");


POMOCY
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 Wersja Lo-Fi Aktualny czas: 8.07.2025 - 09:03