Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z pracą w tle
smiady
post
Post #1





Grupa: Zarejestrowani
Postów: 137
Pomógł: 2
Dołączył: 2.07.2007
Skąd: Ostrzeszów

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


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.

Ten post edytował smiady 28.05.2014, 15:09:53
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 Aktualny czas: 22.08.2025 - 05:30