Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Dostęp do zmiennej
Forum PHP.pl > Forum > Przedszkole
kamil_lk
Cześć.
W jaki sposób mogę odwołać się do zmiennej 'zmienna' w klasie A za pomocą obiektu b?
  1. function A(){
  2.  
  3. var zmienna = 'a';
  4.  
  5. }
  6.  
  7. function B(){
  8.  
  9. this.a = new A();
  10.  
  11. }
  12.  
  13. b = new B();
  14.  
  15. // tutaj chcę wywalić alerta z wartością zmiennej 'zmienna' wykorzystując obiekt b
nospor
Czy to podchwytliwe pytanie? Normalnie, pokolei
alert(b.a.zmienna);
kamil_lk
tak właśnie próbuję zrobić, ale zmienna jest undefined
http://jsfiddle.net/aSfU8/
nospor
No bo nie:
var zmienna = 'a';
a:
this.zmienna = 'a';

kamil_lk
Dzięki! wink.gif

Mam kolejny problem z dostępem do zmiennej 'tracking'.
Na początku przypisuje do niej jakiś string, tutaj "start". Następnie zapisuje do niej to co zwraca mi ajax (console.log() w ajax-ie wyświetla to co mnie interesuje).
Ale już przy próbie wyświetlenia danej zmiennej poprzez obiekt b, ta zmienna przechowuje wartość ustawionego stringa.
  1. function A(){
  2. this.tracking = 'start';
  3. this.trackInfo = function(){
  4. $.ajax({
  5. type: "POST",
  6. url: "index.php?action=trackInfo",
  7. data:{ ajax_value: true },
  8. success: function(msg) {
  9. if (typeof msg !== 'undefined')
  10. {
  11. if (app.fun.isJson(msg))
  12. {
  13. this.tracking = jQuery.parseJSON(msg);
  14. console.log(this.tracking);
  15. }
  16. }
  17. },
  18. error: function() {
  19. console.log('Error!');
  20. }
  21. });
  22. }
  23. }
  24.  
  25. function B(){
  26. this.a = new A();
  27. }
  28.  
  29. b = new B();
  30.  
  31. alert(b.a.tracking); //tutaj w wyświetlany jest string ustawiony na początku, a chcę żeby było to co zwraca ajax.
nospor
będąc w AJAX this. nie odnosi się do obiektu A, tylko do obiektu AJAX smile.gif
kamil_lk
Nadal zwraca stringa ustawionego na początku. Nie mam pojęcia o co chodzi.
nospor
A myslisz ze po moim poscie zadzialala magia i samo sie naprawilo??
PrinceOfPersia
klasyczne pułapki JavaScript. Chyba każdy przez to przechodził, kto pierwszy raz dosiadł do tego języka wink.gif
ale to dobrze, bo to znaczy, że wyżej wymienione problemy są opisane w każdym chyba poradniku/podręczniku do JS i w masie tematów na stack overflow...
kamil_lk
Nie wiem czy dobrze kombiunuję. Znalazłem podobny temat na Stackoverflow, ale jakoś mi nie wychodzi. Pomożecie, naprowadzicie?
  1. function A(){
  2. this.tracking = 'start';
  3. this.trackInfo = function(handle){
  4. $.ajax({
  5. type: "POST",
  6. url: "index.php?action=trackInfo",
  7. data:{ ajax_value: true },
  8. success: function(msg) {
  9. if (typeof msg !== 'undefined')
  10. {
  11. if (app.fun.isJson(msg))
  12. {
  13. data= jQuery.parseJSON(msg);
  14. handle(data);
  15. }
  16. }
  17. },
  18. error: function() {
  19. console.log('Error!');
  20. }
  21. });
  22. }
  23.  
  24. this.tracking = this.trackInfo(function(output){
  25. console.log(output);
  26. return output;
  27. });
  28. }
  29.  
  30. function B(){
  31. this.a = new A();
  32. }
  33.  
  34. b = new B();
  35.  
  36. alert(b.a.tracking);
nospor
Kod JS to nie PHP. Przestan wkladac to w bbcode PHP.....

Kod
function A(){

this.tracking = 'start';
var self = this;
    this.trackInfo = function(){  

       $.ajax({

            type: "POST",

            url: "index.php?action=trackInfo",

            data:{ ajax_value: true },

            success: function(msg) {

                if (typeof msg !== 'undefined')

                {

                    if (app.fun.isJson(msg))

                    {

                        self.tracking = jQuery.parseJSON(msg);  

                        console.log(this.tracking);                      

                    }                    

                }

            },

            error: function() {

               console.log('Error!');

            }

        });

    }

}

I juz
kamil_lk
Moim problemem było to, że chciałem wykorzystać zmienną zbyt szybko (zanim zostały do niej wpisane dane z ajaxa.
Posłużyłem się funkcją setInterval i teraz mi pięknie śmiga wink.gif
Pozdrawiam.
PrinceOfPersia
więc robisz to źle. Jeśli będziesz miał pięć zmiennych pobieranych z ajaxa, to będziesz robił 5 setIntervalów?

mamy tu do czynienia z asynchronicznym wywołaniem funkcji (czyli wywolujesz funkcję ajax, a ona nie daje wyniku od razu, tylko pobiera, pobiera, aż w koncu odpali się zdarzenie 'success'), więc najlepiej wejść w klimat i programować w oparciu o zdarzenia, a nie odpytywać "czy zmienna się pojawiła".

polecam przeczytanie: smile.gif
http://webroad.pl/javascript/746-synchroni...synchronicznosc
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.