Witam.

Otóż tworzę pewny moduł gdzie dane, które się długo generują były cashowane (tzn. po pierwszym jego uruchomieniu zostały zapisane do pliku i przy kolejnych uruchomieniach wygenerowane dane będą pochodzić z pliku). Utworzyłem coś takiego:

  1. for(var i= 1; i<= users.length; ++i) {
  2. $.ajax({
  3. url: 'przeloguj.php',
  4. async: false,
  5. data: {
  6. id: users[i-1]
  7. }
  8. }).done(function() {
  9. $.ajax({
  10. url: 'tabelka_z_danymi.php',
  11. async: false
  12. }).done(function() {
  13. if(i!= users.length) {
  14. $('#postep').text((i+1) + '/' + users.length);
  15. $('#postep').css('background-size', (1/users.length) * 100 + '% 100%');
  16. } else {
  17. $('#postep').text('cashowanie zostało ukończone');
  18. $('#postep').css('background-size', '100% 100%');
  19. }
  20. }).fail(function() {
  21. alert('niestety wystąpił błąd przy cashowaniu !');
  22. });
  23. }).fail(function() {
  24. alert('niestety wystąpił błąd przy cashowaniu !');
  25. });
  26. }


Tablica users zawiera id uzytkowników. W każdej pętli następuje przelogowanie użytkownika (dokładnie zmiana sesji), a następnie ajaxem utworzenie danych wg obecnie zalogowanego użytkownika. Obecny mechanizm działa (w folderze można jedno po drugim zobaczyć jak generują się pliki) problem w tym, że strona się cały czas ładuje nie pokazując treści, a dopiero po wygenerowaniu wszystkich plików ukazuje się z pełnym paskiem, gdzie wszystko jest już ukończone. Co zrobić, aby dane pokazywały mi się na żywo questionmark.gif
Wyłączyłem tryb asychroniczny (async: false) - strona się wtedy nie ładuje, ale nie wiem czemu generuje mi się tylko jeden plik - po za tym powoduje to, że odpalają się wszystkie ajaxy na raz przez co nie mogę wygenerować postępu działania.

Dobra rozwiązałem sam ten problem.

Ajax poszedł nie w pętli jako for tylko w pętli rekurencyjnie, gdzie rekurencyjnie funkcja wywoływała się w zdarzeniu done.