Problem mit Ajax und GET-Variablen
Gast
- javascript
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
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
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
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
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
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
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
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
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
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