Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jquery] zmienne globalne
Forum PHP.pl > Forum > XML, AJAX > AJAX
MadMark
Witam, mam problem ze zmiennymi (globalne i lokalne) a mianowicie:
  1. var a = '';
  2. $(document).ready(function(){
  3. $.ajax({
  4. type: "POST",
  5. url: "./login.php",
  6. data: "em1=itwork",
  7. success: function(msg){
  8. a = msg;
  9. }
  10. });
  11. alert(a);
  12. //...

Czyli po kolei, inicjuję zmienną -> wykonuje działanie w pliku php, dostaje zwrot -> przypisuję i... tu jest problem...
Jak wyświetlę po przypisaniu "a" to ma wartość, ale w alercie już nie ma wartości.

Jak to poprawić? Tzn jak edytować w ajaxie zmienną globalną?
Kombinowałem z tym ale nie znam się na tyle, aby samemu dać radę.
Z góry dziękuję za pomoc smile.gif
zegarek84
chyba jest dobrze... ustaw dłuuugi timeout na tego alerta - odpowiedź z ajax'a zawsze będziesz miał później - dlatego stosuje się callbacki (chyba, że zastosujesz ajax synchroniczny)... czyli tego alerta wywołaj tak: setTimeout(function(){alert(a);},4000);

lub jeśli chciałeś daną akcję inicjalizować po otrzymaniu odpowiedzi z ajax'a to musisz inicjować to w callbacku - o setTimeout wspomniałem tylko dla powyższego przykładu cobyś sobie sprawdził...

przy czym zaznaczę, że jeśli na niższym scope zadeklarujesz znowu tą zmienną poprzedzając przez var lub w definicji funkcji to to już będzie jakby zmienna lokalna ale też globalna w kontekście tej funkcji w głąb dla innych funkcji - sorki - dziwnie to zabrzmiało ;]
smentek
"jak edytować w ajaxie zmienną globalną?" - zmienne globalne są zle. Nizej masz 'object literal' napisany 'z palca' rozkmiń jak to dziala i staraj sie kodowac w tym stylu.


  1.  
  2. $(document).ready(function(){
  3.  
  4. var someObject = {
  5.  
  6. alertPopup: function( zzz ){
  7. alert( zzz )
  8. },
  9.  
  10. ajaxOperation: function( dddd ){
  11. var that = this;
  12.  
  13. $.ajax({
  14. type: "POST",
  15. url: "./login.php",
  16. data: {em1: dddd},
  17. success: function(msg){
  18. that.alertPopup(msg);
  19. }
  20. });
  21. },
  22.  
  23. start: function( x ){
  24. this.ajaxOperation( x );
  25. }
  26. };
  27.  
  28. someObject.start( 'itwork' );
  29.  
  30.  
  31. });
MadMark
nic z tego nie działa...
Zrobiłem tak:

function ax(method, file, data){
var t = $.ajax({
type:method,
url: file,
data: data,
async: false
}).responseText;
return t;
}

i używanie tej funkcji gwarantuje mi przypisanie do zmiennej globalnej danych uzyskanych przez ajax.
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.