Formular ohne Framework verarbeiten

2 | 17 Kommentare | 5616 Aufrufe
Sie können diese Wikiseite nach der Anmeldung auf Webmasterpro bearbeiten. Helfen Sie mit und verbessern Sie "Formular ohne Framework verarbeiten" mit Ihrem Wissen!

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

 
JavaScript
 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

 
HTML
 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

 
JavaScript
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

 
PHP
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

 
HTML
 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.


Wikiseite bearbeiten

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.

Mitarbeiter
  • 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.

Kommentare: Formular ohne Framework verarbeiten

Neuen Kommentar schreiben
checkboxen
Beantworten

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

omshanti am 11.03.2010 um 22:57
Gleiches name-Attribut?
Beantworten

In der gesamten HTML-Datei haben beide Input-Felder das Attribut "name" mit "nachname". Richtig / Falsch?

Benutzer gelöscht am 06.07.2008 um 18:56
Re: Gleiches name-Attribut?
Beantworten

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.

sten am 06.07.2008 um 19:04
Re: Gleiches name-Attribut?
Beantworten

gefixt :P

Benutzer gelöscht am 06.07.2008 um 19:06
JS DEAKTIVIERT
Beantworten

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...

Marcel Domke am 18.06.2008 um 17:02
Re: JS DEAKTIVIERT
Beantworten

Sobald JS deaktiviert ist bringt dir deine Verarbeitung aber auch nichts mehr....

Ohne Javascript ist AJAX (Asynchronous JavaScript and XML) generell schwer zu realisieren ;-).

Welche Art von Frameworks meinst du den? PHP JS? Ich weiß das ist unter der Rubrik "AJAX" geschrieben aber man sollte das verdeutlichen...

Ich meine Javascript-basierte Frameworks wie mootools oder prototype. Wenn du möchtest, kannst du das ja irgendwie ergänzen.

Das verarbeiten sollte am Ende noch serverseitig geschehen...

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 ;).

sten am 18.06.2008 um 17:26
Re: JS DEAKTIVIERT
Beantworten

Ja mal sehen vieleicht mache ich sowas mal mit Prototype. :) Aber ansonsten sehr Gutes Tutorial...

Sobald JS deaktiviert ist bringt dir deine Verarbeitung aber auch nichts mehr....

Ohne Javascript ist AJAX (Asynchronous JavaScript and XML) generell schwer zu realisieren ;-).

Welche Art von Frameworks meinst du den? PHP JS? Ich weiß das ist unter der Rubrik "AJAX" geschrieben aber man sollte das verdeutlichen...

Ich meine Javascript-basierte Frameworks wie mootools oder prototype. Wenn du möchtest, kannst du das ja irgendwie ergänzen.

Das verarbeiten sollte am Ende noch serverseitig geschehen...

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 ;).

Marcel Domke am 18.06.2008 um 20:46
geht nicht!
Beantworten

da ist wohl ein Fehler drinne ;)

value is not defined gibt mir mein Firebug zurück ...
formValues = formValues + '\"' + name + '\":\"' + value + '\",';

Marcel Domke am 18.06.2008 um 16:57
Re: geht nicht!
Beantworten

value is not defined gibt mir mein Firebug zurück ...
formValues = formValues + '\"' + name + '\":\"' + value + '\",';

Hängt mit der Umstellung auf fieldset und label zusammen. Sollte jetzt funktionieren, hab die Funktion JSON() angepasst.

sten am 18.06.2008 um 18:14
Re: geht nicht!
Beantworten

Sehr gut

value is not defined gibt mir mein Firebug zurück ...
formValues = formValues + '\"' + name + '\":\"' + value + '\",';

Hängt mit der Umstellung auf fieldset und label zusammen. Sollte jetzt funktionieren, hab die Funktion JSON() angepasst.

Marcel Domke am 18.06.2008 um 20:43
js schön und gut aber...
Beantworten

..was mir sehr negativ auffällt ist die nutzung von tabellen statt der vorgesehenen semantischen tags (fieldset, label).

wieso nicht standardkonform und semantisch?

Benutzer gelöscht am 18.06.2008 um 14:32
Re: js schön und gut aber...
Beantworten

asche über mein haupt, wird geändert!

..was mir sehr negativ auffällt ist die nutzung von tabellen statt der vorgesehenen semantischen tags (fieldset, label).

wieso nicht standardkonform und semantisch?

sten am 18.06.2008 um 15:19
Re: js schön und gut aber...
Beantworten

asche über mein haupt, wird geändert!

Wann?

..was mir sehr negativ auffällt ist die nutzung von tabellen statt der vorgesehenen semantischen tags (fieldset, label).

wieso nicht standardkonform und semantisch?

Thomas Schaaf am 18.06.2008 um 15:47
Re: js schön und gut aber...
Beantworten

Was zickt ihr den so rum? :)

asche über mein haupt, wird geändert!

Wann?

..was mir sehr negativ auffällt ist die nutzung von tabellen statt der vorgesehenen semantischen tags (fieldset, label).

wieso nicht standardkonform und semantisch?

Fabian Ziegler am 18.06.2008 um 16:07
Re: js schön und gut aber...
Beantworten

Was zickt ihr den so rum? :)

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 ;).

sten am 18.06.2008 um 17:31
Re: js schön und gut aber...
Beantworten

Was zickt ihr den so rum? :)

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 ;).

Schuldigung habe den erst übersehen -> dachte kein öffentliches Bearbeiten.

Thomas Schaaf am 18.06.2008 um 18:08
Re: js schön und gut aber...
Beantworten

Was zickt ihr den so rum? :)

Dann mach ich das jetzt schnell :P

asche über mein haupt, wird geändert!

Wann?

..was mir sehr negativ auffällt ist die nutzung von tabellen statt der vorgesehenen semantischen tags (fieldset, label).

wieso nicht standardkonform und semantisch?

Thomas Schaaf am 18.06.2008 um 16:13