Formular ohne Framework verarbeiten
Anzeige Hier werben
Warum sollte man ohne Framwork arbeiten?
Das ist sicherlich die Frage, die sich jeder als erstes stellt. Die Antwort ist erstaunlich simpel: Frameworks sind in der Regel sehr umfangreich und deshalb reichlich ungeeignet, um die Technik dahinter zu verstehen.
Wenn man also nicht einfach blind ein Framework nutzen möchte, sondern auch den technischen Aspekt abdecken möchte, bietet es sich durchaus an, probeweise ohne Framework zu arbeiten.
Die in diesem Artikel vorgestellte Funktion xhr (Abkürzung für XMLHttpRequest) überprüft lediglich die Browserkompabilität für das XHR-Objekt und erstellt ein solches. Dieser Vorgang wird dabei in eine schlanke Funktion zusammengefasst.
Die xhr-Funktion
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /*@cc_on @if (@_win32 && @_jscript_version >= 5) if (!window.XMLHttpRequest)
window.XMLHttpRequest = function() { return new ActiveXObject('Microsoft.XMLHTTP') }
@end @*/
function xhr(method, url, data, cb, apply_para) {
method = method.toLowerCase();
var req;
req = new XMLHttpRequest();
req.open(method, url + (data && method == 'get' ? '?' + data : ''), true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
if (method == 'post') {
req.setRequestHeader("Method", "POST " + url + " HTTP/1.1");
req.setRequestHeader("Content-Length", data.length);
}
req.onreadystatechange = function() {
if (req.readyState == 4 && req.status == 200) {
if (cb) {
cb.apply(null, [req].concat(apply_para));
}
}
}
req.send(data);
}
|
Die xhr-Funktion wird mit den Parametern method (get oder post), url (aufzurufende Datei), data (zu übergebende Daten), cb (auszuführende JS-Callbackfunktion) aufgerufen. Hier zu ein Beispiel:
An die Datei request.php sollen die Daten foo=bar und bar=foo per get übergeben werden, bei einem erfolgreichen Request, soll die Javascriptfunktion shout() das Requestobjekt erhalten.
xhr('get','request.php','foo=bar&bar=foo',shout);
In unserem Beispiel lagern wir die XHR-Funktion in die Datei xhr.js aus, um das Ganze übersichtlicher zu gestalten.
Das HTML-Formular
1 2 3 4 5 6 7 8 9 10 | <form id="daten" onsubmit="return false;" name="daten" action="#">
<fieldset>
<legend>Formular</legend>
<label for="vorname">Vorname</label>
<input type="text" id="vorname" name="vorname" />
<label for="nachname">Nachname</label>
<input type="text" id="nachname" name="nachname" />
<input type="submit" name="submit" id="submit" value="Senden" onclick="xhr('get','request.php','daten='+JSON(),shout);" />
</fieldset>
</form>
|
Das HTML-Formular daten umfasst in diesem Beispiel nur 2 Felder (vorname,nachname) und einen Submitbutton, das onsubmit-Event stoppt den Absendeprogress des Formulars, da die Seite nicht neu geladen werden, sondern die Daten per Ajax übergeben werden sollen. Das Event onclick wird ausgeführt, wenn der Submitbutton geklickt wird, demnach die Daten übertragen werden sollen. Hierbei wird die Funktion xhr ausgeführt. Die Funktion JSON wird anschließend erklärt.
Die JSON-Funktion
1
2
3
4
5
6
7
8 | function JSON() {
var formValues = '{';
for (var i=0; i<document.getElementsByTagName('input').length; i++) with (document.getElementsByTagName('input')[i])
{
formValues = formValues + '\"' + name + '\":\"' + value + '\",';
}
return formValues = formValues.substr(0,formValues.length-1) + '}';
}
|
Die Javascriptfunktion JSON() erstellt ein JSON aus allen Formulardaten in die Variable formValues und gibt diese zurück.
Die PHP-Datei
1 2 3 4 | <?php
$daten_arr = json_decode(stripcslashes($_GET['daten']),true);
var_dump($daten_arr);
?>
|
Die PHP-Funktion json_decode erstellt ein Array aus dem JSON, dass in der Variable daten übergeben wurde. Anschließend wird das Array ausgegeben. Für spezifischere Zwecke kann man das Array hier verarbeiten und dann eine entsprechende Ausgabe erzeugen.
Die gesamte HTML-Datei
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script type="text/javascript" src="xhr.js"></script>
<script type="text/javascript" >
function JSON() {
var formValues = '{';
for (var i=0; i<document.getElementsByTagName('input').length; i++) with (document.getElementsByTagName('input')[i])
{
formValues = formValues + '\"' + name + '\":\"' + value + '\",';
}
return formValues = formValues.substr(0,formValues.length-1) + '}';
}
function shout(req) { alert(req.responseText); }
</script>
</head>
<body>
<form id="daten" onsubmit="return false;" name="daten" action="#">
<fieldset>
<legend>Formular</legend>
<label for="vorname">Vorname</label>
<input type="text" id="vorname" name="vorname" />
<label for="nachname">Nachname</label>
<input type="text" id="nachname" name="nachname" />
<input type="submit" name="submit" id="submit" value="Senden" onclick="xhr('get','request.php','daten='+JSON(),shout);" />
</fieldset>
</form>
</body>
</html>
|
Die Callbackfunktion shout() gibt eine MessageBox mit dem Inhalt des responseTexts aus.
Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher haben 4 Personen an der Seite "Formular ohne Framework verarbeiten" mitgewirkt.
Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Formular ohne Framework verarbeiten" hier bearbeiten.
-
hat keine Beschreibung angegeben. Eine Beschreibung kann man unter dem Punkt "Profil bearbeiten" im Kontrollzentrum eintragen.
-
Thomas Schaaf ist Programmierer und Supportleiter der Komola UG. Die Projekte von
Komola werden mit PHP 5, MySQL 5, xHTML, CSS sowie AJAX umgesetzt.
Des weiteren vertreibt er die deutsche Version der beliebten PHP IDE VS.Php.
-
graphic, motion & web design - kernreaktor - staportal - mukitu
-
hat keine Beschreibung angegeben. Eine Beschreibung kann man unter dem Punkt "Profil bearbeiten" im Kontrollzentrum eintragen.


checkboxen
zuerst mal vielen herzlichen dank für dieses einfache script, dass es einem newbie wie mir wirklich das leben erleichtert :)
was jedoch fehlt sind checkboxen. wäre super, du könntest solche noch integrieren!
liebe grüße
monika
Gleiches name-Attribut?
In der gesamten HTML-Datei haben beide Input-Felder das Attribut "name" mit "nachname". Richtig / Falsch?
Re: Gleiches name-Attribut?
Falsch! Vermutlich ein Flüchtigkeitsfehler. Wenn du es schnell selbst verbesserst, steht dein Name auch in der Mitarbeiterliste, also beeil dich ;-). Denk aber dran, dass dieser Teil des Quelltexts doppelt im Artikel vorkommt, du ihn also zwei mal verbessern musst :-P.
Re: Gleiches name-Attribut?
gefixt :P
JS DEAKTIVIERT
Sobald JS deaktiviert ist bringt dir deine Verarbeitung aber auch nichts mehr....
Welche Art von Frameworks meinst du den? PHP JS? Ich weiß das ist unter der Rubrik "AJAX" geschrieben aber man sollte das verdeutlichen...
Das verarbeiten sollte am Ende noch serverseitig geschehen...
Re: JS DEAKTIVIERT
Ohne Javascript ist AJAX (Asynchronous JavaScript and XML) generell schwer zu realisieren ;-).
Ich meine Javascript-basierte Frameworks wie mootools oder prototype. Wenn du möchtest, kannst du das ja irgendwie ergänzen.
Sicher, das ist ja auch der Grund warum man die Daten überhaupt überträgt! Ich hatte eigentlich gehofft, der Satz "Für spezifischere Zwecke kann man das Array hier verarbeiten und dann eine entsprechende Ausgabe erzeugen." würde das ein wenig verdeutlichen. Für andere/zusätzliche Formulierungen bin ich jederzeit offen ;).
Re: JS DEAKTIVIERT
Ja mal sehen vieleicht mache ich sowas mal mit Prototype. :) Aber ansonsten sehr Gutes Tutorial...
geht nicht!
da ist wohl ein Fehler drinne ;)
value is not defined gibt mir mein Firebug zurück ...
formValues = formValues + '\"' + name + '\":\"' + value + '\",';
Re: geht nicht!
Hängt mit der Umstellung auf fieldset und label zusammen. Sollte jetzt funktionieren, hab die Funktion JSON() angepasst.
Re: geht nicht!
Sehr gut
js schön und gut aber...
..was mir sehr negativ auffällt ist die nutzung von tabellen statt der vorgesehenen semantischen tags (fieldset, label).
wieso nicht standardkonform und semantisch?
Re: js schön und gut aber...
asche über mein haupt, wird geändert!
Re: js schön und gut aber...
Wann?
Re: js schön und gut aber...
Was zickt ihr den so rum? :)
Re: js schön und gut aber...
Sehe ich ähnlich! Man sollte bedenken, dass sich hier Leute in ihrer Freizeit hinsetzen und versuchen etwas zur Gemeinschaft beizutragen. Für Verbesserungen gibt es ja extra die Editierfunktion ;).
Re: js schön und gut aber...
Schuldigung habe den erst übersehen -> dachte kein öffentliches Bearbeiten.
Re: js schön und gut aber...
Dann mach ich das jetzt schnell :P