Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [advAJAX] onSuccess ...
Forum PHP.pl > Forum > XML, AJAX
umatik
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...
msulik
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; },
graft
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.
msulik
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. });
graft
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ą.
msulik
Czy dobrze rozumiem, że masz coś takiego:
  1. ...
  2. $("#element").html("<?php cośtam(); ?>");
  3. ...
?
graft
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.
msulik
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
graft
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
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.