Ergebnis 1 bis 5 von 5
  1. #1
    alex.maier ist offline Jungspund
    registriert
    21-04-2006
    Beiträge
    17

    Ajax / Browser Timeout

    Hallo,

    ich habe folgendes Problem: Habe eine Ajax Anwendung, wo Listen per PHP abholt und in eine DB geschrieben werden. Bisher ist es so, das wenn man den entsprechenden Laden-Link anklickt, per JS in einen Status-Div im unteren Teil der Seite eine Meldung "Lade Daten..." geschrieben wird.
    Sobald das PHP Script, das angesprochen wurde, alles abgearbeitet hat, kommt eine Meldung von diesem zurück, die Dann wieder entsprechend per JS in den Status-Div geschrieben wird (onSuccess ... Ajax eben -.

    Solange das PHP Script nicht zu lange braucht, läuft das ganze auch einwandfrei. Leider gibt es aber Listen, die sehr gross sind und wo das PHP Script dann sehr lange braucht (>30Min). In diesem Fall arbeitet das PHP Script auch alles korrekt ab (also kein Timeout seitens PHP, da safe_mode off & set_timelimit(0)), allerdings wird die Rückmeldung nicht mehr ins Status-Div geschrieben. Es sieht irgendwie so aus, als ob da der Browser (IE und FF) in einen Timeout geht und das zuückgelieferte nicht mehr verarbeitet.

    Nun meine Frage, gibts da ne Möglichkeit, das JS vielleicht den Status-Div immer mal wieder aktualisiert oder eben irgendwas dem Browser mitteilt, damit er auch nach längerer Zeit noch auf die Rückgabe des Requests reagiert?

    Vielen Dank vorab, Alex

  2. #2
    cybaer ist offline Kaiser
    registriert
    12-09-2006
    Beiträge
    1.338

    AW: Ajax / Browser Timeout

    Wie wäre es mit einer Statusausgabe ab und an?

    S. z.B. Explosive (Quelltext: JavaScript mit PHP ).

    Edit: Oops, sorry. Du brauchst ja Ajax-only.

    Hmm, weiß ich nicht - so langwierige Ajax-Requests habe ich noch nie gemacht. Wie wäre es denn, wenn Du den Request in einem (unsichtbaren) (I)Frame ablaufen läßt - ganz ohne Ajax. Dann wäre das nämlich (s.o.) kein Problem.

    Das fertige Ergebnis kannst Du dir dann ja mit JS aus dem (I)Frame holen, bzw. von dort aus direkt ins Hauptdokument schreiben.
    Geändert von cybaer (19-04-2007 um 18:44 Uhr)
    Gruß, Cybaer

  3. #3
    alex.maier ist offline Jungspund
    registriert
    21-04-2006
    Beiträge
    17

    AW: Ajax / Browser Timeout

    Hi cybaer,

    danke für die schnelle Antwort.
    Aber wie meinst das genau?

    Dass in dem moment, wo ich "Laden" drücke, neben dem Request auch noch zusätzlich eine JS-Funktion gestartet wird, die ab und an was im Browser anzeigt? Wie z.B. eine sich selbst aufrufende Funktion mit setTimeout, die dann immer wieder "Bitte warten..." in den Status Div schreibt?

    Weil vom Ajax Request, also vom aufgerufenen PHP Script kann ich ja nur eine Rückmeldung geben, die dann von onSuccess ausgewertet wird.


    Alex

  4. #4
    alex.maier ist offline Jungspund
    registriert
    21-04-2006
    Beiträge
    17

    AW: Ajax / Browser Timeout

    Weiss keiner mehr was dazu?

  5. #5
    cybaer ist offline Kaiser
    registriert
    12-09-2006
    Beiträge
    1.338

    AW: Ajax / Browser Timeout

    Sorry die Verspätung - die Benachrichtigung ist mir durch die Lappen gegangen. Also falls es für dich noch von Interesse ist ...
    ... ansonsten für spätere Sucher:
    Zitat Zitat von alex.maier Beitrag anzeigen
    Weil vom Ajax Request, also vom aufgerufenen PHP Script kann ich ja nur eine Rückmeldung geben, die dann von onSuccess ausgewertet wird.
    Ja, eben. Das ist mir dann auch noch aufgefallen, daß Du ja Ajax-only nutzen willst.

    Deswegen eben der Rat, in diesem Fall auf Ajax zu verzichten, und stattdessen den Request über einen (unsichtbaren) (I)Frame zu machen.

    Aber wie meinst das genau?

    Dass in dem moment, wo ich "Laden" drücke, neben dem Request auch noch zusätzlich eine JS-Funktion gestartet wird, die ab und an was im Browser anzeigt? Wie z.B. eine sich selbst aufrufende Funktion mit setTimeout, die dann immer wieder "Bitte warten..." in den Status Div schreibt?
    Nein. Stell dir vor, daß Du z.B. einen IFRAME hast. Als SRC für diesen IFrame dient dein PHP-Script. Dieses PHP-Script kann nun sporadisch Ausgaben machen (flush()). Damit werden schonmal irgendwelche Browser-Timeouts zuverlässig verhindert.

    Die Ausgaben selbst sind ohne Belang, aber Du kannst natürlich auch JS ausgeben (s. das von mir gelinktes Beispiel), und dieses JS kann dann den HTML-Code der Elternseite des IFRAME-Elements kontinuierlich verändern (z.B. Statusanzeige).

    Zuletzt gibt dein PHP-Script dann einfach ein JavaScript aus, das das Ergebnis in das gewünschte Element schreibt. Also z.B.:

    Hauptdokument mit dem IFRAME:

    <div id="ergebnis"></div>

    PHP-Script im IFRAME:

    echo '<script type="text/javascript">parent.document.getElementById("ergebnis").innerHTML=unescape("'.rawurlencode('HierDeinE rgebnis').'");</script>');

    (das Encoden/Unescapen ist nur notwendig, falls es sich um ein mehrzeiliges Ergebnis handeln kann.)

    Das IFRAME-Element kannst Du per JS jederzeit on-the-fly erzeugen, bzw. ihm jederzeit eine neue Resource zuweisen, falls Du mehrere PHP-Scripte nacheinander abarbeiten möchtest - oder mußt, falls es doch mal auf einem Server mit Time-Limit laufen soll.

    Ajax ist hier also, so oder so, eher ein unpassender Ansatz ...
    Gruß, Cybaer

Ähnliche Themen

  1. Ajax
    Von Frankie5 im Forum Site-Check
    Antworten: 12
    Letzter Beitrag: 02-04-2007, 20:48
  2. Ajax: Mehrere Request nacheinander; Browser warten lassen
    Von der Jörchen im Forum JavaScript
    Antworten: 12
    Letzter Beitrag: 25-07-2006, 22:33
  3. Browser zum Rendern zwingen
    Von BrockLanders im Forum JavaScript
    Antworten: 2
    Letzter Beitrag: 15-06-2006, 15:55
  4. Mein Browser ist besser als Deiner
    Von RoyalKnight im Forum Smalltalk
    Antworten: 2
    Letzter Beitrag: 10-08-2004, 12:58
  5. Auflösung und Browser feststellen
    Von staxxx im Forum JavaScript
    Antworten: 2
    Letzter Beitrag: 05-10-2003, 15:52

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •