Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: getJson i zasięg zmiennej
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
MarcinTryka
Od razu przejdę do kodu który wydaje mi się oczywisty:
  1. function klasa(){
  2. this.licznik=0;
  3. this.uruchom=function(){
  4. $.getJSON('url do jsona', function(json){
  5. //jakaś akcja
  6. this.licznik=1;
  7. });
  8. }
  9. this.getLicznik=function(){
  10. return this.licznik;
  11. }
  12. }
  13.  
  14. var objekt=new klasa();
  15. console.log(objekt.getLicznik()); //zwraca 0
  16. objekt.uruchom();
  17. console.log(objekt.getLicznik()); //zwraca 0


W jaki sposób mam zmienic wartosc "licznik:" ? Korzystam z jQuery czy powninienem użyć tego frameworka w jakiś konkretny sposób tworząc klasy?
everth
Używanie this jest trochę niebezpieczne bo jego zawartość zawsze odnosi się do aktualnego obiektu - co później może prowadzić do błędów takich jak u ciebie. Ja radzę sobie w taki sposób że tworzę nową zmienną zawierającą referencję do aktualnego obiektu. Czyli u ciebie wyglądałoby to tak:
[JAVASCRIPT] pobierz, plaintext
  1. function klasa(){
  2. var thisObj = this; //nowa referencja
  3. this.licznik=0;
  4. this.uruchom=function(){
  5. $.getJSON('url do jsona', function(json){
  6. //jakaś akcja
  7. thisObj.licznik=1; //tutaj odwołujemy się do właściwego obiektu - inaczej odwołalibyśmy się do callbacka
  8. });
  9. }
  10. this.getLicznik=function(){
  11. return this.licznik;
  12. }
  13. }
[JAVASCRIPT] pobierz, plaintext
MarcinTryka
Przerobilem swoj skrypt na Twoj sposob. Najpierw zadzialalo smile.gif Po dalszych przeróbkach przestało działać. Próbowałem debugować i jak robiłem firebugiem "stop" to efekt byl taki jakby zmienna zostawala przekazywana. Jak nie stopowalem skryptu to nie.

Problem rozwiązałem - wynikał z tego że skrypt nie czeka aż wykona się funkcja z getJson - po prostu dalsza czesc skryptu korzystała z obiektu zanim własnosc zostala ustawiona smile.gif Dzieki za wskazowki.
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.