Gast: Problem mit Ajax und GET-Variablen

Hallo,

ich möchte den Inhalt eines Formulares per Ajax an den Server senden. Der soll den betreffenden Datensatz in der DB ändern.

Das Problem ist, dass die Zeilenumbrüche aus einem <textarea> Feld verloren gehen.

Habe versucht, den Feldinhalt mit
escape(string)
GET-tauglich zu machen, aber das klappt nicht. Vor dem ersten Umlaut wird der Feldinhalt abgeschnitten.

Das sendende und das empfangende Programm arbeiten im UTF-8 Modus. Eine Form mot POST zu übermitteln, ist kein Problem.

Kann ich Ajax überreden, den POSTweg zu nehmen?

Gruß vom Gast

  1. Natürlich. Einfach bei xhr.open('GET', url, true) statt "GET" eben "POST" nehmen und beim xhr.send([Daten]) die Daten als URI-Encodeter String übertragen.

    Gruß, LX

    --
    RFC 2324, Satz 7 (Sicherheit): Jeder, der zwischen meinem Kaffee und mir steht, gilt als unsicher.
    1. Natürlich. Einfach bei xhr.open('GET', url, true) statt "GET" eben "POST" nehmen und beim xhr.send([Daten]) die Daten als URI-Encodeter String übertragen.

      Danke dir, die GET-Stelle habe ich gefunden und auf POST geändert.

      Nun habe ich aber keine Ahnung, wie POST-Daten aufzubereiten sind.

      Die Ajax-Sendung in der alten Form
      http://example.com/?wert1=xxx&wert2=yyy

      Wird vom empfangenden Programm nicht erkannt.
      echo $_POST['wert1']
      ist leer anstatt xxx

      Gruß, Gast

      1. hi,

        Nun habe ich aber keine Ahnung, wie POST-Daten aufzubereiten sind.

        POST Daten sehen mit enctype="application/x-www- form-urlencoded" genauso aus wie ein Query_String:

        wert1=xxx&wert2=yyy

        Wird vom empfangenden Programm nicht erkannt.
        echo $_POST['wert1']
        ist leer anstatt xxx

        Das muss alles drin sein, beachte die header:

          
        xhr.open("POST", hash.url, true);  
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  
        xhr.setRequestHeader("Content-length", hash.params.length);  
        xhr.setRequestHeader("Connection", "close");  
        xhr.send(hash.params);  
        
        

        Content-Length muss stimmen, das ist die Anzahl der bytes. Infolge Percent-Encoding sind alle Daten ASCII, Zeichen=Byte, daher funktioniert params.length.

        Hotti

      2. Hallo,

        Danke dir, die GET-Stelle habe ich gefunden und auf POST geändert.
        Nun habe ich aber keine Ahnung, wie POST-Daten aufzubereiten sind.

        genauso wie für GET - nur nicht als Query-String in der URL-Zeile, sondern als Request-Body. URL-Codierung nicht vergessen; die braucht's bei POST ebenso wie bei GET.

        Die Ajax-Sendung in der alten Form
        http://example.com/?wert1=xxx&wert2=yyy
        Wird vom empfangenden Programm nicht erkannt.
        echo $_POST['wert1']
        ist leer anstatt xxx

        Natürlich. Die URL-Parameter wert1 und wert2 übergibst du ja immer noch als GET-Parameter. Du erzeugst sozusagen einen POST-Request ohne POST-Daten, dafür aber als Schmankerl mit ein paar GET-Parametern.

        Ciao,
         Martin

        --
        Ich bin im Prüfungsstress, ich darf Scheiße sagen.
          (Hopsel)
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Moin!

          Danke dir, die GET-Stelle habe ich gefunden und auf POST geändert.
          Nun habe ich aber keine Ahnung, wie POST-Daten aufzubereiten sind.

          genauso wie für GET - nur nicht als Query-String in der URL-Zeile, sondern als Request-Body. URL-Codierung nicht vergessen; die braucht's bei POST ebenso wie bei GET.

          Glaubst du, dieses Einschießen auf "POST statt GET" bringt was, solange die für UTF-8-Daten untaugliche Funktion escape() nicht bereinigt wird?

          - Sven Rautenberg

          1. Hallo,

            Glaubst du, dieses Einschießen auf "POST statt GET" bringt was, solange die für UTF-8-Daten untaugliche Funktion escape() nicht bereinigt wird?

            nein, deswegen habe ich ja versucht klarzumachen, dass der OP damit nichts gewinnt, weil er die gleiche Aufbereitung der Daten braucht.

            Ciao,
             Martin

            --
            Denken ist wohl die schwerste Arbeit, die es gibt. Deshalb beschäftigen sich auch nur wenige damit.
              (Henry Ford, amerikanischer Industriepionier)
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. hi,

    Habe versucht, den Feldinhalt mit
    escape(string)
    GET-tauglich zu machen, aber das klappt nicht. Vor dem ersten Umlaut wird der Feldinhalt abgeschnitten.

    Egal ob GET oder POST, mit enctype="application/x-www- form-urlencoded" muss ein encoding erfolgen. Das kanst Du im Fall einer ISO-Zeichenkodierung mit escape() machen, aber Du möchtest utf-8 benutzen, also nimm die Funktion encodeURIComponent(textarea);

    Das sendende und das empfangende Programm arbeiten im UTF-8 Modus.

    Das Formular sollte vom Server her mit Content-Type: text/html; charset=UTF-8 ausgeliefert werden. Damit sind die Zeichen in den Eingabefeldern/Textarea auch richtig kodiert.

    Letztendlich müssen auch die Daten richtig serialisiert sein (key=value&key=value), bei POST die Längenangabe über diesen ganzen String nicht vergessen!

    Hotti

    1. Hallo, hotti,

      im Moment verstehe ich gar nichts.

      Die Änderung von GET auf POST hat die Kommunikation zwischen Client und Server zum Erliegen gebracht.

      Das Formular hatte ich per Ajax (GET) gefüllt, nun (POST) bleibt es leer und kann natürlich auch nicht sinnvoll mit Ajax zurückgeschickt werden.

      Hatte heute einen langen Tag und bin für neue Lernschritte nicht mehr fit.

      Mal sehen, ob ich morgen den Bogen kriege.

      Gruß, Gast

      1. hi,

        Hatte heute einen langen Tag und bin für neue Lernschritte nicht mehr fit.

        hehe, keine Ausreden ;-)

        Mal sehen, ob ich morgen den Bogen kriege.

        Lies dir mal alle Antworten durch, damit schaffst du es heute noch.

        Dranbleiben,
        Hotti