zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden Ajax ReadyState 3

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 01.12.2006, 22:37
Benutzerbild von kevink
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.07.2005
Beiträge: 25
kevink befindet sich auf einem aufstrebenden Ast
Standard Ajax ReadyState 3

Hi,

Ich hab heute angefangen Ajax zu lernen, da mich Ajax einfach fasziniert!
Zum erstenmal bin Ich mit Ajax bei Google-Mail zusammengestoßen, und da dachte Ich mir sofort "dass muss Ich lernen".
Nach ein paar Googlesuchen hab Ich dann auch schon aufgehört weiterdanach zu suchen, da es auf einen Schlag "so viel" war.

Naja, nach 2 Monaten hab Ich mich wieder rangesetzt (heute ) und nun hab Ich mein erstes Ajax Script geschrieben, das mir nur durch Eingabe von Buchstaben sofort die dazugehörigen Suchergebnisse von Google ausspuckt .

Der Grundstein fürs weitere lernen ist nun gesetzt, nur mit einem komme Ich noch gar nicht klar: readyState 3.

readyState 4 ist soweit klar, die Daten werden angezeigt wenn die Datei fertig ist zu laden.

readyState 3 ist eigentlich auch klar, die Daten werden sofort übertragen, wenn der Server ein "push" sendet, was z.b. unter PHP flush() entsprechen würde.

Die Ausgabe funktioniert soweit auch, aber wie schaffe Ich es, zusätzliche Daten, wie z.b. einen Status - _neben_ der eigentlichen Rückgabe der Datei zu übergeben?

Z.b.:
Das Script "listmp3s.php" zeigt alle Mp3´s in einem Ordner an.
Nach jedem MP3-Dateinamen folgt ein flush(), um dies direkt an den Clienten zu übertragen.
Nun möchte Ich neben der Dateiliste, noch einen Status haben, der mir z.b. anzeigt, wieviel Prozent der MP3´s bereits ausgelesen wurden.

Wie mache Ich das? Brauche Ich dort einen extra XML Request?

Was Ich alles mit readyState 3 machen könnte! Aber ich bekomme das einfach nicht hin :-/.

Danke mal im Vorraus .

Gruß Kevin
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 07.12.2006, 12:46
Benutzer
neuer user
 
Registriert seit: 11.04.2004
Beiträge: 61
molily wird schon bald berühmt werden
Standard

Zitat:
Zitat von kevink Beitrag anzeigen
readyState 3 ist eigentlich auch klar, die Daten werden sofort übertragen, wenn der Server ein "push" sendet, was z.b. unter PHP flush() entsprechen würde.
Der Server sendet keinen »Push«, sondern er sendet einfach. readyState 3 heißt erst einmal, dass der Server gerade Daten sendet und der Browser einfach zuhört und wartet. flush() macht nichts besonderes, sondern sendet einfach die Daten im Puffer.

Im Opera und Konqueror wird z.B. nur ein readyState-Event gefeuert, im Firefox viele hintereinander. Im Firefox kannst du folgendermaßen vorgehen: Beim ersten Event mit readyState gleich 3 fragst du über getResponseHeader den HTTP-Header »Content-Length« ab. Darin steht, wenn es sich um eine statische Datei auf dem Server handelt, die gesamte Dateigröße in Bytes. Gleichzeitig kannst du mit .responseText.length die bereits übertragenen Bytes (bzw. Zeichen) abfragen. Daraus lässt sich ein Prozentwert errechnen.

Zitat:
Die Ausgabe funktioniert soweit auch, aber wie schaffe Ich es, zusätzliche Daten, wie z.b. einen Status - _neben_ der eigentlichen Rückgabe der Datei zu übergeben?
»Nebenher« geht nicht, ich wüsste auch nicht, wie das mit einem parallelen Request funktionieren sollte. Woher weiß das serverseitige Script, ob der Client schon alles empfangen hat? Es übergibt nur Daten an den Apache zum Senden an den Client und beendet sich dann.

Zitat:
Das Script "listmp3s.php" zeigt alle Mp3´s in einem Ordner an.
Nach jedem MP3-Dateinamen folgt ein flush(), um dies direkt an den Clienten zu übertragen.
Nun möchte Ich neben der Dateiliste, noch einen Status haben, der mir z.b. anzeigt, wieviel Prozent der MP3´s bereits ausgelesen wurden.
Das würde wohl ziemlich umständlich. Du kannst am Anfang eine Zeile ausgeben, in der die Anzahl aller Dateien drinsteht. Und vor jeden Dateinamen eine Nummer schreiben. So kannst du bei einem readyState-3-Event die letzte Zeile von responseText auslesen und die bereits übertragenen Dateien auslesen. Ich würde daher mit Content-Length arbeiten, siehe oben.
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 30.04.2007, 16:19
Neuer Benutzer
neuer user
 
Registriert seit: 30.04.2007
Beiträge: 1
schicker03 befindet sich auf einem aufstrebenden Ast
Standard

Hi kevink,

ich denke das es so wie Du es Dir vorstellst sicher gar nicht klappt.

Wenn Du "listmp3s.php" aufrufst wird dein Browser zwar auf die Antwort des Scripts warten und vielleicht kannst Du mit flush und den ready states die aktuelle ausgabe abfangen, aber der Browser wird auf die fertige antwort warten, ehe er die Antwort einer 2ten Anfrage(request) darstellt.

nochmal kurz
solange die erste abfrage nicht fertig ist, kannst Du zwar hintenrum eine Menge Requests absetzen, die Antworten dieser requests werden aber erst vom Browser ausgewertet wenn das 1te (listmp3s.php) Script fertig ist.

Also kannst Du auch keinen Status damit abrufen/darstellen.

Man könnte das ganze anders lösen aber nicht sehr schön.
z.B. indem listmp3s.php gar keine Ausgabe macht sondern 2 Dateien erzeugt /bzw. Sie regelmäßig füllt und nur auf dem Server ausgeführt wird.
(z.B. mit exec oder system)

Die eine Datei mit der Ausgabe die Du per flush erreichen möchtest, also auch die spätere reine ausgabe
und
eine Datei mit einen Status Wert, z.B. 0.5 für 50%

Jetzt kannst Du aus dem Browser eine Datei aufrufen welche "listmp3s.php" auf dem Server lädt und 2 layer zurückgibt die Du regelmäßig füllst, eben einmal mit der Datei welche die Ausgabe enthält und aus der anderen Datei kannst Du eine Statusbalken zusammenbauen.

Wie gesagt keine schöne Lösung aber funktionert.
Hab gerade gesehen das der Post auch schon recht alt ist.

Wahrscheinlich hast Du schon eine bessere Lösung für das Problem gefunden xD

gruss
schicker03
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ajax - Datenbanksbruf: ASP Datei mit PHP code füllen? braindead Javascript & Ajax 3 19.10.2009 13:35
Jquery AJAX Aufruf und Tablesorter MoFu Javascript & Ajax 2 18.09.2009 09:09
Ajax und InternetExplorer M@tes Javascript & Ajax 1 28.05.2009 17:45
Frames vs. Ajax oSonnYo Javascript & Ajax 4 09.11.2006 14:38
Buchrezension: AJAX - Frische Ansätze für das Webdesign Flocke Ressourcen 2 01.11.2005 22:08


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:10 Uhr.