![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 76 Pomógł: 0 Dołączył: 8.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nie do końca jest dla mnie jasna sprawa z zasięgiem zmiennych. Wiem jak sprawa wygląda w teorii, jednak w praktyce sobie z tym nie radzę. Chcę uniknąć tworzenia zmiennych globalnych jako pole obiektu window i rozwiązać sprawę bardziej elegancko.
Na początku przedstawię problem. Skrypt w PHP "search_dir.php" zwraca mi jakąś wartość np.: ilość plików danego typu w katalogu, ilość katalogów, listę plików w tablicy w zależności od podanych parametrów i robi to dobrze. Problem jest z przetworzeniem tych danych pobieranych ajaxem. Funkcja getDir() pobiera dane, a następnie przekazuje w callback zmienną 'data' do funkcji 'galleries(). Tutaj pojawia się problem. Chcę dalej operować na zmiennej data, ale nie chcę tworzyć nowego pola obiektu window. Tworzę nowy obiekt 'gal' klasy Gallery() i w pole gal.count chcę wstawić, to co zwrócił mi skrypt w PHP (np. w tym wypadku ilość katalogów). W tym momencie mam sprzeczne informacje co do tego, co zwraca mi funkcja galleries(). Kod getDir('galeria'); alert(data); alert(gal.count); w takiej postaci otrzymuję 2 alerty: [Object] i 4 ((4 to ilość katalogów w podanym katalogu) w tej postaci Kod getDir('galeria'); //alert(data); alert(gal.count); otrzymuję jeden alert o pustej treści w tej postaci Kod getDir('galeria'); alert(data); //alert(gal.count); otrzymuję alert o treści [object] Tutaj mam pytanie. Czemu w drugim przypadku otrzymuję pusty alert, zamiast alert o treści 4. W jaki sposób zwrócić wartość funkcji galleries(), tak żebym mógł z tej wartości dalej korzystać. Dane zwracane przez skrypt PHP będą służyły do dynamicznego generowania galerii zdjęć na podstawie zawartości podanego katalogu. Kompletny kod skryptu: CODE <script type="text/javascript">
//var data; Gallery = function() {} Gallery.prototype.name = '' gal = new Gallery(); $(document).ready(function() { function getDir(dir){ $.post('search_dir.php', { 'directory': dir, 'type': 'directory' }, function(data){ galleries(data); }); } function getDirContent(dir){ $.post('search_dir.php', { 'directory': dir, 'type': 'directory', 'extension': 'jpg', 'list': 'true' }, function(data){ //alert(data); }); } function galleries(data) { gal.count = data; }; getDir('galeria'); alert(data); alert(gal.name); }); Ten post edytował wujek_bogdan 18.10.2010, 13:40:36 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Tu chodzi o asynchroniczność. Dla przykładu:
Kod function getDir(dir){ $.post('search_dir.php', { 'directory': dir, 'type': 'directory' }, function(data){ galleries(data); }); Funkcja: Kod function(data){ galleries(data); } Wywoła się dopiero po odebraniu od serwera odpowiedzi (readyState == 4) wiec jeśli napiszesz: Kod getDir('foo/'); alert(123); // w tym miejscu nie ma pewnosci (tak samo jak wszedzie ponizej) czy juz zostala wywolana funkcka galleries() -------------------- Moja gra - scraby.io
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 18:30 |