Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX] dostęp do zmiennej
Forum PHP.pl > Forum > XML, AJAX
rafalw
Witam

Napisalem taka oto funkcje:

  1. function calculateFreeSpace()
  2. {
  3. var space;
  4.  
  5. var url = 'index.php?view=homeworks&action=calculateFreeSpace&nocache=' + (new Date()).getTime();
  6.  
  7. window.httpObj = createXMLHTTPObject();
  8. window.httpObj.open('GET', url , true);
  9.  
  10. window.httpObj.onreadystatechange = function()
  11. {
  12. if (window.httpObj.readyState == 4 && window.httpObj.responseText)
  13. {
  14. result = eval('(' + window.httpObj.responseText + ')');
  15. document.getElementById('free_space_number').innerHTML = result.number;
  16. document.getElementById('free_space_percent').innerHTML = result.percent + ' %';
  17. space = parseInt(result.percent);
  18. }
  19. }
  20.  
  21. alert(space);
  22.  
  23. window.httpObj.send(null);
  24.  
  25. for (i=0; i < space ; i++)
  26. {
  27. id = '_'+0;
  28. document.getElementById(id).style.backgroundColor = '#AEA';
  29. }
  30. }


wszystko dziala pieknie, pobiera dane, wpisuje w odpowiednie pola, problem w tym ze pobrane dane (tj. result.percent) chce rowniez zapisac do zmiennej 'space' w celu pozniejszego uzycia. Natomiast zmienna space jest tylko widoczna w czesci dotyczacej zapytania, natomiast juz poza nim w alercie dostaje "undefined". Przypuszczam ze to dlatego ze wywoluje funkcje ajaxowa i zmienna nigdzie dalej nie ejst juz widoczna, natomiast nie za bardzo wiem jak to ugryzc. Pozdrawiam
emp
Na wiele sposobów to możesz ugryźć
1) zmienna globalna // nie za rozsądne nigdy nie stosuje w takich przypadkach jak twój
2) inna notacja np: obiektowo-singletonowa winksmiley.jpg // to stosuje można ładnie wszystko opakować, nie masz wskaźnika this, nie możesz tworzyć nowych instancji tej klasy , ale masz zawsze jedna instancje. This w twoim wypadku na nic by ci się nie przydał bo i tak by był niedostępny w twojej funkcji.
3) zapisz dane do niewidzialnego pola input, a potem możesz odczytać winksmiley.jpg // też niezbyt rozsądne stosuje w wyjątkowych okolicznościach twój taki nie jest
4) są na pewno inne sposoby


  1. calc =
  2. {
  3. space: 0,
  4.  
  5. calculateFreeSpace : function()
  6. {
  7. var url = 'index.php?view=homeworks&action=calculateFreeSpace&nocache=' + (new Date()).getTime();
  8.  
  9. window.httpObj = createXMLHTTPObject();
  10. window.httpObj.open('GET', url , true);
  11.  
  12. window.httpObj.onreadystatechange = function()
  13. {
  14. if (window.httpObj.readyState == 4 && window.httpObj.responseText)
  15. {
  16. result = eval('(' + window.httpObj.responseText + ')');
  17. document.getElementById('free_space_number').innerHTML = result.number;
  18. document.getElementById('free_space_percent').innerHTML = result.percent + ' %';
  19. calc.space = parseInt(result.percent);
  20. }
  21. }
  22.  
  23. alert( calc.space );
  24.  
  25. window.httpObj.send(null);
  26.  
  27. for (i=0; i < space ; i++)
  28. {
  29. id = '_'+0;
  30. document.getElementById(id).style.backgroundColor = '#AEA';
  31. }
  32. }
  33. }
  34.  
  35. calc.calculateFreeSpace() ;


Nie masz jak się odwołać do zmiennej space w swoim skrypcie w moim masz poprzez obiekt calc.
Ogólnie ogarnij sobie temat klas w javascripcie są 2 podstawowe notacje inaczej będziesz skazany na zmienne globalne i kombinatorykę.
rafalw
dzieki za pomoc, narazie wykombinowalem zeby wrzucic ta pentle zaraz w zapytaniu ajaxowym smile.gif ale na przyszlosc bede wiedzial, to narazie moje pierwsze kroki z jaxem i js smile.gif pozdrwiam
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.