Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX] dostęp do zmiennej
rafalw
post 11.12.2009, 20:46:49
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 11.12.2009

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


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

Ten post edytował rafalw 11.12.2009, 20:48:05
Go to the top of the page
+Quote Post
emp
post 12.12.2009, 04:30:03
Post #2





Grupa: Zarejestrowani
Postów: 195
Pomógł: 14
Dołączył: 12.01.2006
Skąd: Gotham City

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


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ę.

Ten post edytował emp 12.12.2009, 04:37:00


--------------------
Temat zamykam i przenoszę do Bangladeszu.
To jest wiadomość śmierci jeśli ją czytasz to znaczy że pozostało ci 30 sekund życia, więc lepiej zacznij się modlić.
Go to the top of the page
+Quote Post
rafalw
post 13.12.2009, 16:06:44
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 11.12.2009

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


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

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 16:40