Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][PHP]Pokazywanie w divie wartosc wykonywanej petli
Forum PHP.pl > Forum > Przedszkole
alpin
Witam Panowie ! Potrzebuje pomocy , a mianowicie mam taki szkic co chce osiagnac:
  1.  
  2. <div id=pokaz></div>
  3.  
  4. for ($i=1; $i<100; $i++) {
  5.  
  6. echo "Numer to : $i";
  7. sleep(1);
  8. }
  9.  

I teraz ze tak powiem jak zrobic to echo w divie pokaz ?
Wykonuje skrypty ktore bardzo dlugo czasowo cos tam trawia i chcialbym miec tak jakby podglad na zywo w ktorym miejscu jest moj skrypt , dla przykladu dalem petle for i powiedzmy ze odpalam skrypt i w divie co sekunde zmienia mi nr $i i na zywo pokazuje aktualny wykonywany. Mam nadzieje ze zrozumiecie o co mi chodzi. Podejrzewam ze bez ajaxa sie nie obejdzie, najlepsze chyba bedzie jquery bo akurat z niego tez tam uzywam jakiejs funkcji ale nie jestem sobie w stanie sam poradzic z napisaniem czegos takiego. Z gory dziekuje

Bardzo mi na tym zalezy, nikt nie moze mi podpowiedziec ? bardzo pragne to zrobic ale naprawde nie moge sobie poradzic, moze w troche wiekszym skrocie to przedstawie
  1. <?
  2. for($i=1;$i<100;$i++)
  3. {
  4.  
  5. }
  6.  
  7. ?>
  8. <div id=moj>Tu ma sie pokazywac aktualna wartosc $i i sie zmieniac bez odswiezania strony<div>
q3trm
Nie wiem co to za skrypt, który się wykonuje u Ciebie po stronie PHP. Ajax-em pobierasz jedynie rezultat skryptu PHP, nie jesteś w stanie odbierać jego rzeczywistego statusu. Możesz wykonać skrypt po stronie Jquery, który będzie generował np. stoper odliczający czas uzyskania odpowiedzi z serwera.

wladimirec
ja swego czasu spotkałem się z rozwiązaniem wykorzystującym do tego dodatkowy plik, do którego zapisywany był na bieżąco postęp iteracji.
Idea wyglądała mniej więcej tak:
  1. $total = 100;
  2. for ($i=0; $i<$total, $i++) {
  3. // jakieś skomplikowane operacje
  4.  
  5. $status = array('current' => $i+1, 'total' => $total);
  6. file_put_contents('status.json', json_encode($status));
  7. }


W momencie wciśnięcia guzika, uruchamiana jest za pomocą metody js setTimeout funkcja, która pobiera z tego pliku status.json aktualne wartości i w zależności do nich generuje prosty pasek postępu. (banalne do wykonania z jQuery)
W momencie, gdy current == total timer jest zatrzymywany.
Takie rozwiązanie sprawdzało się w przypadku skomplikowanych operacji na bazie, które łącznie potrafiły trwać po kilkadziesiąt sekund.

Idea jest dość prosta i podejrzewam, że są jakieś lepsze rozwiązani. W przypadku możliwości uruchamiania równoległych akcji przez różnych użytkowników należałoby zastosować jakąś unikalną nazwę dla plików ze statusem.
alpin
Pobieram curlem pewne dane z serwisu, jest bardzo duzo wyrazen regularnych, zapisuje do bazy, te skrypty wykonuja sie niekiedy po pare dobrych godzin, i po prostu chcialem miec na monitorze aktualny status, gdzie jest skrypt , na jakim etapie dodawania ...
  1. //jakies bardzo duze petle przegladajace
  2. <span id=\"dialog_title_span\"></span>
  3. <script>$('#dialog_title_span').html("Przegladam strone nr: <b><? echo $strona ?></b> Skanuje firme nr : <b><? echo $nr_firmy ?></b> z <b><? echo $ile_firm ?></b>");</script>
  4. <?
  5. ?>

mniej wiecej tak to wyglada, prawie juz dziala, ale nie dokonca .. wyniki :
  1. NR KATEGORI: 1
  2. KATEGORIA: Tablice, znaki informacyjne, drogowe - produkcja
  3. Przegladam strone nr: 1 Skanuje firme nr : 25 z 48 PRZEWIDYWANA LICZBA WYNIKOW: 44
  4. Podsumowanie kategori NR: 1
  5. Znaleziono Stron: 2
  6. Dodano wszystkie 44 do bazy! OK!
  7.  
  8. NR KATEGORI: 2
  9. KATEGORIA: Tabliczki znamionowe
  10. //tutaj powinno snowu byc <span> a nie jest , aktualna pozycja skryptu bedac juz w 2 kategori pokazuje w span kategori 1
  11. PRZEWIDYWANA LICZBA WYNIKOW: 48

i to tak leci kategoria 3,4,5 itd ale wersu "Przegladam strone nr: 1 Skanuje firme nr : 25 z 48 PRZEWIDYWANA LICZBA WYNIKOW: 44" spodziewalem sie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.