Skrypt PHP pobiera dane na temat ilości katalogów w podanym katalogu (robi też inne rzeczy, ale to akurat nieistotne), następnie ajaxem pobieram wartość i tworzę na podstawie tych danych różne własności obiektu Gallery. W tym wypadku chodzi o zliczenie elementów galerii:

  1. <script type="text/javascript">
  2.  
  3. $(document).ready(function() {
  4.  
  5.  
  6. var Gallery = {
  7. name: 'default',
  8. items: 0,
  9. desc: 'default'
  10. };
  11.  
  12. $.post('search_dir.php', {
  13. 'directory': 'galeria',
  14. 'type': 'directory'
  15. }, function (data){ // data zawiera ilosc elementow, w tym momencie data = 4
  16. GallerySetItems(data); // przekazujemy data = 4 do funkcji GallerySetItems()
  17. });
  18.  
  19. function GallerySetItems(items) {
  20. alert(items); // wyswietla sie prawidlowo przekazana wartosc 4
  21. Gallery.items = items; // ustawia Gallery.items na 4
  22. }
  23.  
  24. $('#data').text(Gallery.items); // Wysciwetla Gallery.items. spodziewana wartosc to 4. Wyswietla sie 0. WHY !!questionmark.gif
  25.  
  26. // ponizej dla testu, gdy wywoluje recznie funkcje GallerySetItems() to wszystko gra.
  27.  
  28. GallerySetItems('1000'); // ustawia items na 1000
  29. $('#data1').text(Gallery.items); // wyswietla 1000
  30.  
  31. });
  32.  


w #data wyświetla się wartość 0, zamiast spodziewanej wartości 4. nie jest to problem z asynchronicznym pobieraniem danych, ponieważ alert() wywołany testowo przed Gallery.items wyświetla wartość prawidłową, czyli 4.

Poniżej dla testu wywołuję funkcję GallerySetItems('1000'); i wartość Gallery.items jest prawidłowo ustawiana i wyświetlana.


//EDIT:
Temat do zamknięcia.
Kod
$('#data').text(Gallery.items);

wykonuje się zanim wykona się ajaxowy post, więc wartość jest 0. gdy wrzucę wykonanie tego kodu w setInterval, to po kilku milisekundach pojawia się prawidłowa, spodziewana wartość winksmiley.jpg