molily: AJAX: Ganzes Formular senden

Beitrag lesen

Hallo,

Lies mal XML in the Browser: Submitting forms using AJAX.

//use single quotes for argument so that the value of
//fobj.elements[i].value is treated as a string not a literal
cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
val = eval(cmd)

Uhh, schlechter Stil.

Funktionen sind Objekte, man kann sie einer Funktion als Parameter übergeben:

function validate (value) {
   ...
}
...
function sub (f) {
   ...
   var str = getFormValues(f, validate);
   ...
}
function getFormValues (fobj, valFunc) {
   ...
   valFunc(fobj.elements[i].value);
   ...
}

<input type="button" value="Request Information" onClick="sub(this.form)">
In Zeiten von unobtrusive JavaScript ziemlich obsolet, es gibt ja onsubmit und DOM.

Des Weiteren ist es nicht so trivial, einen ordentlichen application/x-www-form-urlencoded-kodierten HTTP-Body auf Formularfeldern zusammenzubauen.

str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";

Ist nicht so wunderbar. escape("€") bringt z.B. lustige Dinge wie %u20AC, womit man auf der Serverseite wirklich nichts mit anfangen kann. escape("ö") bringt %F6 (also ISO-8859-1-kodiert), was aber Unsinn ist, wenn man Content-Type: application/x-www-form-urlencoded; charset=UTF-8 senden will.

Siehe mein Beispiel zu Formular in Echtzeit speichern (ist das Forumsarchiv nicht toll? man muss nur suchen).

Mathias