Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][AJAX]Informowanie usera o postępach bez refresha
Forum PHP.pl > Forum > Przedszkole
infoo1
Jak zrobić tak, aby użytkownik widział postępy wykonywania skryptu PHP bez odświeżania strony? Przykład:
Skrypt PHP zapisuje do bazy jakieś dane, np. dodaje tabele i wpisuje defaultowe info. Co zrobić, aby user bez odświeżania strony widział pasek CSS (szerokość niebieskiego na białym tle na bieżąco aktualizowana Ajaxem) i były komunikaty np. (pod koniec widać wszystko):
Cytat
[tu pasek]
Tworzenie tabeli konfiguracyjnej...
Tworzenie tabeli z użytkownikami...
Wypełnianie danymi tabeli konfiguracyjnej...
Wypełnianie danymi tabeli z użytkownikami...

Pamiętam, że na jakiejś stronie to widziałem, więc jest możliwe.
W Google szukałem, ale niczego nie znalazłem (pewnie szukałem ze złymi keywordami. to pewnie ma jakąś krótką nazwę, a nie opisową).
EarthCitizen
Przykład, który podałeś to pewnie jakiś skrypt instalacji, więc taki bajer w tego typu gotowcach to jeszcze rozumiem...

Nie da się procentowo tego zrobić (1,2,3...,n%), chyba, że na każdy z takich punktów chcesz określić jakiś procent.... A tak w ogóle to sporo zabawy z takim skryptem, który jest tylko bajerem i niczym więcej, bo większość zadań jest wykonywana w tak krótkim czasie, że ile ten pasek będzie widoczny, 2-3 sekundy ?
wookieb
Nie wszystkie. Niektóre skrypty wykonujące tysiące operacji działają znacznie dłużej.

Musze cię zmartwić. Jest to niemożliwe.
EarthCitizen
Cytat(wookieb @ 22.01.2009, 16:49:17 ) *
Nie wszystkie. Niektóre skrypty wykonujące tysiące operacji działają znacznie dłużej.

Musze cię zmartwić. Jest to niemożliwe.


Jest to możliwe... Pytanie tylko do czego chce ktoś tego użyć, bo jak do rejestracji usera albo dodanie wpisu w księdze gości to bez sensu...
wookieb
Podaj proszę przykład. Mogę się mylić więc chętnie poznam rozwiązanie.
EarthCitizen
Cytat(wookieb @ 22.01.2009, 16:52:30 ) *
Podaj proszę przykład. Mogę się mylić więc chętnie poznam rozwiązanie.


Jedyne rozwiązanie jakie przychodzi mi teraz do głowy to wykonywanie tych wszystkich punktów jako oddzielne requesty z Ajaxa i jakaś kontrola tego wszystkiego po stronie PHP w sesji a po stronie klienta jakaś pętla w JS...

Kiedyś taki myk zrobiłem dla wysyłania maili z załącznikami (ale na ramkach) i każdy załącznik wysyłany był oddzielnie i był pasek postępu zapisywanie plików 1 z 10, 2 z 10 itd... Teraz do uploadu jest ciekawym rozwiązaniem jeden z gotowych komponentów we flashu, gdzie można pokazać bardzo wiele danych związanych z wysyłaniem pliku.... Ale to tylko do uploadu, a koledze chodziło raczej o jakieś uniwersalne rozwiązanie...
infoo1
Do kilku rzeczy:
1. Instalacja->baza danych
2. Wyszukiwanie (teraz trwa około 100 s, w różnych katalogach)
3. I wiele, wiele więcej.

Cytat
pasek będzie widoczny, 2-3 sekundy
100 s, czasem więcej.

Cytat
Przykład, który podałeś to pewnie jakiś skrypt instalacji, więc taki bajer w tego typu gotowcach to jeszcze rozumiem..
Nie chcę gotowego kodu, tylko jakiś tutorial, albo nazwę tego "bajeru" (wtedy sobie poradzę z pomocą Google).
EarthCitizen
nazwa to Preloader/Pasek ładowania
wookieb
No wlaśnie. Jedyne rzeczy jakie znalazłem to procentowanie wykonywania elementów w pętli. Ale to się sprawdza tylko do niektórych rzeczy. A nie do wszystkiego.
gebp
Dam przykład oparty o klasę mintAJAX (bo tą troszkę znam i używam).

skrypt
  1. <script type="text/javascript">
  2. function przetwarzanie()
  3. { var req=mint.Request();
  4. req.method="post"; // dodaje przesyłanie danych postem
  5.  
  6. req.OnSuccess = function() { var res= req.responseText;
  7. if(res=="1"}
  8. { $("odpowiedzi").innerHTML = "KONIEC";}
  9. else
  10. { $("odpowiedzi").innerHTML = "res";
  11. przetwarzanie(); }
  12.  
  13. req.Send("skrypt.php")
  14.  
  15. }
  16.  
  17. <div id="odpowiedzi">
  18. <inptu type="button" onclick="przetwarzanie" Value="PRZETWARZAJ" />
  19.  
  20. </div>

i sam skrypt.php coś ala
  1. <?php
  2. $zakonczona_czesc_skryptu=$_SESSION['czesc_skryptu'];
  3. if ($zakonczona_czesc_skryptu=="")
  4. { //.. wykonuje jakies funkcje
  5.  $_SESSION['czesc_skryptu']=1;
  6.  echo " Zakonczono pierwszą część skrypru";
  7.  exit();
  8. }
  9. elseif ($zakonczona_czesc_skryptu==1)
  10. {//.. wykonuje jakies funkcje
  11.  $_SESSION['czesc_skryptu']=2;
  12.  echo " Zakonczono drugą część skrypru";
  13.  exit();
  14. }
  15. elseif    // itd.
  16.  
  17. //a na samym końcu
  18.  
  19. else
  20. {//.. wykonuje jakies funkcje
  21.  $_SESSION['czesc_skryptu']=2;
  22.  echo "1";
  23.  exit();
  24. }
  25. ?>
infoo1
Zrobiłem takie coś:
Kod
    var load    =    new Array(
        'index.php?id=1',
        'index.php?id=2',
        'index.php?id=3',
        'index.php?id=4',
        'index.php?id=5'
    );

    function start()
    {
        global load;
        for (i = 0; i <= sizeof(load); i++)
        {
            i    ==    0 ? var i2    =    1    :    var i2    =    i;
            funkcja_wczytujaca(load[i]);
            var p    =    i2/sizeof(load)/100;
            set(p,i);
        }

        return true;
    }

    function set(p,i)
    {
        global load;
        document.getElementById('bar').style.width    =    p + 'px';
        document.getElementById('cnt').content    =    'Trwa wczytywanie <span style="font-style: italic;">' + load[i] + '</span>';
        return true;
    }

1. Jak się nazywa funkcja wywołująca dany plik? Tylko wywołuje, nie pobiera zawartości. Albo pobiera zwartość, ale trzeba document.write(funkcja('sth')).
2. Co zrobić, aby dopiero po wczytaniu przechodziło do wczytywania następnego pliku z tablicy?
3. Czy to, co napisałem jest poprawne? Niestety JS nie wyświetla błędów tak, jak PHP...
erix
Cytat
3. Czy to, co napisałem jest poprawne? Niestety JS nie wyświetla błędów tak, jak PHP...

Wyświetla, tylko trzeba zajrzeć. W Fx i Operze masz konsolę błędów.

I nie jest poprawne, choćby z powodu słówka global. O zasięgu zmiennych JS poczytaj tutaj: http://www.webdevelopersnotes.com/tutorial...javascript.php3
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.