Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] Dostęp do zmiennej
kamil_lk
post
Post #1





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


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
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Czy to podchwytliwe pytanie? Normalnie, pokolei
alert(b.a.zmienna);
Go to the top of the page
+Quote Post
kamil_lk
post
Post #3





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


tak właśnie próbuję zrobić, ale zmienna jest undefined
http://jsfiddle.net/aSfU8/
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No bo nie:
var zmienna = 'a';
a:
this.zmienna = 'a';

Go to the top of the page
+Quote Post
kamil_lk
post
Post #5





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


Dzięki! (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




będąc w AJAX this. nie odnosi się do obiektu A, tylko do obiektu AJAX (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kamil_lk
post
Post #7





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


Nadal zwraca stringa ustawionego na początku. Nie mam pojęcia o co chodzi.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A myslisz ze po moim poscie zadzialala magia i samo sie naprawilo??
Go to the top of the page
+Quote Post
PrinceOfPersia
post
Post #9





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


klasyczne pułapki JavaScript. Chyba każdy przez to przechodził, kto pierwszy raz dosiadł do tego języka (IMG:style_emoticons/default/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...
Go to the top of the page
+Quote Post
kamil_lk
post
Post #10





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


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);


Ten post edytował kamil_lk 6.03.2014, 10:32:53
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
kamil_lk
post
Post #12





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


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 (IMG:style_emoticons/default/wink.gif)
Pozdrawiam.
Go to the top of the page
+Quote Post
PrinceOfPersia
post
Post #13





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


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: (IMG:style_emoticons/default/smile.gif)
http://webroad.pl/javascript/746-synchroni...synchronicznosc
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 17:53