BWeiberg: Antwort des Servers auf Submit abfangen

Hallo allerseits,
gibt es eine Möglichkeit, mittels Javascript die Antwort eines Servers auf ein Post-Request (Submit) abzufangen?
Bei einfachen Post-Requests kann ich dieses mit AJAX ganz einfach tun.
Leider muss ich in dem  konkreten Fall eine Datei zum Server übertragen. Dies habe ich über ein html input-element vom typ "file" gelöst (da ich ja aus Sicherheitsgreünden über javascript keine Dateien von der lokalen Festplatte öffnen und deren Inhalt posten kann).
Der Server beantwortet das submit ereignis nach Abschluss der Übertragung nicht mit einer html-seite (welche der browser direkt öffnen kann), sondern mit einem String ("DONE" bzw. "FAILED") und genau diesen String möchte ich mit einer Javascript-Funktion bearbeiten.
Wie lässt sich so etwas realisieren?????
Vielen Dank

  1. Hi,

    Der Server beantwortet das submit ereignis nach Abschluss der Übertragung nicht mit einer html-seite (welche der browser direkt öffnen kann), sondern mit einem String ("DONE" bzw. "FAILED") und genau diesen String möchte ich mit einer Javascript-Funktion bearbeiten.

    Wenn AJAX keine Option ist (ist es bei File-Uploads derzeit noch so gut wie nicht) - dann ziele mit dem Formular auf einen kleinen Iframe, so dass die Antwort dort landet.
    Ein Script aus dem Hauptdokument kann dann diese Antwort auslesen (sofern von der gleichen Domain, klar). Ob du den Iframe noch von ausserhalb mit einem korrekt reagierenden onload-Handler ausgestattet bekommst, musst du ausprobieren - ansonsten ist Polling per Zeitinterval angesagt.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hallihallo!

      Ein Script aus dem Hauptdokument kann dann diese Antwort auslesen (sofern von der gleichen Domain, klar). Ob du den Iframe noch von ausserhalb mit einem korrekt reagierenden onload-Handler ausgestattet bekommst, musst du ausprobieren - ansonsten ist Polling per Zeitinterval angesagt.

      Wenn sowieso ein String zurückgeliefert wird, der noch dazu nicht unmittelbar sichtbar sein soll, kann das PHP-Skript diesen String auch in einer Javascript- Funktion verpacken.
      Diese Javascriptfunktion kann dann ihrerseits dem wartenden parent "bescheidsagen".

      Beste Grüsse,
          Tobias Hahner

      1. Hallo Tobias,

        Wenn sowieso ein String zurückgeliefert wird, der noch dazu nicht unmittelbar sichtbar sein soll, kann das PHP-Skript diesen String auch in einer Javascript- Funktion verpacken.
        Diese Javascriptfunktion kann dann ihrerseits dem wartenden parent "bescheidsagen".

        ja, selbstverständlich. Dabei solltest du aber darauf hinweisen, dass auch das verarbeitende PHP-Script angepasst werden muss. Wenn das -aus welchen Gründen auch immer- keine Option ist, läuft deine Idee ins Leere.

        Ciao,
         Martin

        --
        Lieber eine Stumme im Bett, als eine Taube auf dem Dach.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hallihallo Martin,

          Dabei solltest du aber darauf hinweisen, dass auch das verarbeitende PHP-Script angepasst werden muss. Wenn das -aus welchen Gründen auch immer- keine Option ist, läuft deine Idee ins Leere.

          Das stimmt, in dem Fall bleibt tatsächlich nur das regelmässige Pollen.
          Aber ich bin einfach mal so frei, anzunehmen, dass das PHP-Skript anpassbar ist :)

          Beste Grüsse,
              Tobias Hahner

      2. Hi,

        Wenn sowieso ein String zurückgeliefert wird, der noch dazu nicht unmittelbar sichtbar sein soll, kann das PHP-Skript diesen String auch in einer Javascript- Funktion verpacken.

        Wenn der Frager das serverseitige Script ändern kann - ging für mich nicht so ganz klar hervor.

        Diese Javascriptfunktion kann dann ihrerseits dem wartenden parent "bescheidsagen".

        Dazu muss sie aber erst mal ausgeführt werden - und das wird sie nicht, wenn PHP auf einen Request hin JavaScript-Code zurückliefert, und der Browser diesen in einem Iframe „anzeigen“ soll. Soweit ich mich erinnere, stellen alle mir bekannten Browser dann den Scriptcode als Text dar - selbst wenn der Content-Type explizit JavaScript ankündigt.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hallihallo!

          Wenn sowieso ein String zurückgeliefert wird, der noch dazu nicht unmittelbar sichtbar sein soll, kann das PHP-Skript diesen String auch in einer Javascript- Funktion verpacken.

          Wenn der Frager das serverseitige Script ändern kann - ging für mich nicht so ganz klar hervor.

          Ich war mal so frech, das einfach anzunehmen.
          Selbst wenn dem nicht so ist, trifft das vielleicht irgendwann mal auf Jemanden zu, der das Archiv durchsucht :)

          Diese Javascriptfunktion kann dann ihrerseits dem wartenden parent "bescheidsagen".

          Dazu muss sie aber erst mal ausgeführt werden - und das wird sie nicht, wenn PHP auf einen Request hin JavaScript-Code zurückliefert, und der Browser diesen in einem Iframe „anzeigen“ soll. Soweit ich mich erinnere, stellen alle mir bekannten Browser dann den Scriptcode als Text dar - selbst wenn der Content-Type explizit JavaScript ankündigt.

          Da hast Du recht, das hatte ich übersehen. Ich liefere die Funktion tatsächlich immer in einem kompletten HTML- Dokument verpackt aus, das hätte ich erwähnen sollen.

          Beste Grüsse,
              Tobias Hahner

  2. Moin!

    Der Server beantwortet das submit ereignis nach Abschluss der Übertragung nicht mit einer html-seite (welche der browser direkt öffnen kann), sondern mit einem String ("DONE" bzw. "FAILED") und genau diesen String möchte ich mit einer Javascript-Funktion bearbeiten.
    Wie lässt sich so etwas realisieren?

    Gar nicht. Wenn der Browser Formulardaten absendet und neue holt, dann will er diese auch darstellen, also schmeißt er die alte Seite und jedes damit liierte Javascript raus.

    Lösung 1: Dein Server antwortet mit einer kompletten Seite
    Lösung 2: Dein Server antwortet einem HTTP-Verweis auf eine andere Seite (Stichworte: header("Location: http://example.test/neueSeite.xyz) (Beispiel in PHP) Statuscodes 301, 302
    Lösung 3: Du lädst die Antwort in einen Frame und wertest den mit JS aus.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix