ist Fortschrittsbalken möglich mit PHP und Javascript mit Ajax

8

Ich habe mich gefragt, wie man Fortschritte macht, wie Google Mail.

Ich habe es versucht

%Vor%

Und auf index.php

[EDIT] : by sleep() Ich wollte nur einen kontinuierlichen Ausgabestream wie Multithread-Programme simulieren, der in php nicht unterstützt wird.

%Vor%

es scheint, dass die Ausgabe sofort ausgegeben wird, so dass ich das Ergebnis 012345678910 auf einmal erhalte.

habe ich auch versucht

%Vor%

Stattdessen hatte ich Schwierigkeiten, den Wert von 'progress' beizubehalten, also tat ich

%Vor%

als Teil meines php. Aber es scheint, dass ich Ajax-Funktion auf kontinuierlichem Intervall anrufe.

Meine Frage ist,

  1. Wie verwendet Google den Fortschrittsbalken beim Anmelden in Google Mail? Erhalten sie Continuos 'stream' der Daten wie ich versuchte, an meinem ersten Beispiel oder senden (regelmäßig) Anfrage an eine URL (obwohl nicht durch Ajax .. durch JSONP oder was auch immer) und update die Seite wie zweite?

  2. Kann ich das gleiche mit php tun, auch wenn nicht mit PHP, kann ich das mit Javascript und anderen serverseitigen Skriptsprachen tun, wo Multithreading unterstützt wird?

hasExams 22.04.2011, 07:03
quelle

5 Antworten

8

Ich bin mir nicht sicher, was genau Gmail für die Fortschrittsleiste tut, aber Sie können etwas ähnliches in PHP erreichen, obwohl es ein bisschen schwierig sein kann.

Zuerst, um zu erklären, warum Ihre Beispiele nicht funktionieren:

Wenn Sie echo und schlafen, wie Ihr erstes Beispiel, wird es nie funktionieren. Ajax führt eine vollständige Anforderung aus, dh wenn die Antwort nicht abgeschlossen wird, wartet es. Wenn Sie eine Schleife ausführen und den Ruhezustand aktivieren, wird die Anfrage erst geschlossen, wenn das PHP-Skript beendet ist.

Wenn Sie wie im anderen Beispiel eine Sitzung verwenden, wird das Problem zum Sitzungsspeicher. Der Informationsspeicher ist normalerweise während der Ausführung des Skripts gesperrt und aktualisiert sich nicht selbst, um die Art der Fortschrittsprüfung zu ermöglichen, die Sie möchten.

Sie können den Fortschritt manuell in eine Datei (oder in eine Datenbank) schreiben. Zum Beispiel:

%Vor%

Lassen Sie dann ein anderes Skript die Datei lesen und den Inhalt ausgeben.

Dies sollte funktionieren, weil file_put_contents die Datei öffnet, schreibt und schließt.

Eine andere Sprache als PHP würde es einfacher machen. Multithreading würde es möglicherweise einfacher machen, ist aber keine Voraussetzung. Ein fortlaufender Prozess würde es jedoch einfacher machen (PHP führt nur einen Prozess für die Dauer Ihrer Anfrage aus und wird dann beendet)

    
Jani Hartikainen 22.04.2011, 07:21
quelle
3

Führen Sie Ihren jquery-Code in einem Intervall aus und verwenden Sie PHP, um den Fortschritts-Prozentsatz zu drucken und dann den Balken zu zeichnen.

Es wird also so etwas wie

sein %Vor%

BEARBEITEN 2

%Vor%     
Sourav 22.04.2011 07:12
quelle
3

Ich denke, Google Mail zeigt den Fortschritt an, wenn alle Ressourcen wie JS-Dateien geladen werden. Es gibt verschiedene Möglichkeiten, dies zu tun: Sie könnten alle Ressourcen dynamisch in JS aufnehmen oder Sie könnten alle enthaltenen JS-Dateien darüber informieren, dass sie geladen wurden.

Um PHP eine Teilausgabe zu ermöglichen, verwenden Sie Folgendes:

ob.php

%Vor%

.htaccess

%Vor%     
Znarkus 22.04.2011 07:55
quelle
2

dieser Thread und dieser Link half mir, eine Lösung für das gleiche Problem zu finden, also stelle ich es für die aufnehmen:

test.php:

%Vor%

test.html:

%Vor%

... also kann test.php irgendein JOB sein, der einige Sachen macht ... und währenddessen macht ECHOes 100 Zeichen (Bytes) mit blinkendem Puffer.

    
Asain Kujovic 13.11.2011 07:35
quelle
1

Meiner Meinung nach können Sie Ihren Login-Prozess in mehrere Teile und Checks unterteilen.

Jede abgeschlossene Teilprüfung sendet eine Antwort auf Ihren Fortschrittsbalken und die Fortschrittsbalkenbreite erhöht diese Muster. Danach sendet die Fortschrittsanzeige die nächste Anfrage an Ihren Login-Prozess für Schritt, bis Sie nicht zu 100% Login und Redirect bekommen.

    
Sanjay Mohnani 22.04.2011 07:31
quelle

Tags und Links