php File Upload mit Progress Bar (AJAX)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Original geschrieben von Chrissi007
    [B]Das kommt dabei raus wenn ein Jscript Noob versucht ne AJAX-Anwendung zu bauen...

    Ach schei... ich hab echt keinen blaßen Schimmer...
    Es stellt sich erstmal die Frage, ob du überhaupt deine Daten in JSON kodieren musst. Soweit ich das überblicken kann, ist die Auswahl an Informationen, die die UploadProgressInfo-Erweiterung liefert, eher dürftig. Du bekommst:
    * die hochgeladenen Bytes,
    * die insgesamt hochzuladenden Bytes (POST-Request-Rohdaten-Menge),
    * und eventuell die Nummer der gerade hochgeladenen Datei
    Diese Daten würde ich vom PHP-Script einfach als Text in drei Zeilen (mit CRLF getrennt) ausgeben lassen. Eine JavaScript-Funktion, die diese drei Zeilen in ein (assoziatives) Array aufsplittet, dürfte da keine große Hürde darstellen.

    Außerdem ruft das Client-Script, das Server-Script mit der "Progress-Info" mehrmals auf. Bei deiner Lösung sendet nun das Server-Script bei jeder Anfrage den ganzen Kram (die drei Zahlen + HTML + JavaScript) an den Client -- das summiert sich.

    Und eigentlich ist doch der HTML+JavaScript-Teil immer derselbe. Es sollte also genügen, die Anzeige-Logik einmalig zu laden, und nach Drücken des Submit-Buttons nur noch die reinen Daten abzufragen.

    Könntest du mir vielleicht noch eine kleine Info mir mit auf den Weg geben: Wie ich mit php json-enkodierte Dinge erstelle und an Javascript sende ist mir soweit klar, aber wie krieg ich intern in Javascript dieses Json-Zeugs in eine Variable rein? Also ich muss die json-enkodierte Zeichenkette, die von php kommt, in Javascript ja irgendwie ausführen, oder?
    Code:
    mein_objekt = eval( "(" + http_request.responseText + ")" );
    Klar, prinzipiell kannst du eval() verwenden -- aber eval() ist eine sehr leistungsfähige Funktion. Damit kann man viel Unfug anstellen, beispielsweise existierende Variablen komplett überschreiben -- und von ausführbarem Code reden wir da noch gar nicht. ;-)

    Es gibt aber fertige JSON-Decoder, die das für dich erledigen -- musst du mal Google beätigen. Je nach Code-Umfang des Decoders sind dabei auch Sicherheitsmechanismen eingebaut, die Schlimmeres verhindern:

    http://code.google.com/p/json-sans-eval/
    http://www.json.org/json_parse.js

    Die diversen Frameworks haben auch eingebaute JSON-Parser/-Decoder-Funktionen.

    Eine interessante Alternative stellt parseJSON() dar Diese Funktion könnte irgendwann mal "native" in JavaScript eingebaut werden.

    (...) ich seh nicht so genau, an welcher Stelle hier ein Angriff möglich wäre? Der Client empfängt ja nur Daten aus einem Script.
    Ja gut, im Prinzip sorgt die Same-Origin-Policy und die soliden JavaScript-Implementierungen der Browserhersteller und natürlich auch dein sicherheitslücken-freies Server-Script und die komplett sichere Konfiguration deines Webservers dafür, dass nichts passieren kann. Im Prinzip ...

    Original geschrieben von PHP-Desaster:

    Btw: Ich finde das direkte Übergeben von HTML an den Browser nicht komplett daneben. Klar, eine saubere JSON - oder wie auch immer - Schnittstelle ist eindeutig sauberer, aber das direkte übergeben von HTML hat den Charm, das ich diese gerenderten Abschnitte auch direkt ohne Ajax verwenden kann und nicht zwei verschiedene Formate unterstützen muss.
    Siehe meine obigen Bedenken wegen mehrfacher Übertragung unnötiger Daten.
    Aber das mit dem "ohne AJAX verwenden" versteh ich jetzt nicht -- erklär mal genauer.
    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

    Kommentar


    • #17
      Ich habe das Thema gar nicht von Anfang gelesen, als ich geantwortet habe. Jetzt sehe ich gerade, dass es ja lediglich um eine Progressbar geht, da ist eine direkte Übergabe der entsprechenden Parameter natürlich sinnvoller und mehr als ausreichend.

      Siehe meine obigen Bedenken wegen mehrfacher Übertragung unnötiger Daten.
      Aber das mit dem "ohne AJAX verwenden" versteh ich jetzt nicht -- erklär mal genauer.
      Damit meine ich Content-Bereiche in der Seite, die durch Ajax aktualisiert werden sollen und gleichzeitig - zum Beispiel für Nicht-Ajax-Browser - statisch gerendert werden soll. Wenn diese durch eine PHP-Routine direkt in HTML gerendert werden, so kann dieses Ergebnis entweder direkt in der statischen Ausgabe sowie in der Ajax-Variante verwendet werden, ohne eine weitere Routine für ein weiteres Format erstellen zu müssen. Als Beispiel kann man dazu vielleicht die "zufällige User"-Anzeige im StudiVZ nennen. Die nutzen bestimmt kein direktes HTML als Format, aber das wäre so ein Kandidat.
      Wie gesagt, wenn es richtig sauber sein soll, natürlich per JSON oder sonstwie übertragen und beim Client im JavaScript neu rendern bzw. die Inhalte auswechseln.

      Kommentar


      • #18
        Danke noch mals - Ich hab eure Vorschläge beherzigt

        Ihr habt mich - glaube ich - auf den richtigen Weg gebracht.

        Viele Grüße,
        Chrissi
        Grüße, Chrissi
        Our Dreams are Wings

        Kommentar

        Lädt...
        X