Formulare mit AJAX und jQuery – Ein kleines Tutorial
AJAX ist eine vom Prinzip her sehr einfache Technologie. Request mit JS abschicken, Anfrage mit serverseitigem Skript verarbeiten und Ergebnis wieder im Browser ausgeben bzw. anzeigen. Allerdings steckt der Teufel wie immer im Detail. Dieser Post ist eine kleine Anleitung wie man AJAX mit einem Formular einsetzen kann. Weit einfacher ist dies mit der Verwendung eines JS-Frameworks, hier jQuery.
So zunächste einmal der Standardaufbau in HTML für ein Formular.
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 | <div class="block"> <div class="done"> <b>Vielen Dank. Wir haben Ihre Anfrage erhalten</b> </div> <div class="myForm"> <form method="post" action="saveData.php"> <div class="input"> <label>Name</label> <input type="text" name="name" class="text" /> </div> <div class="input"> <label>Email</label> <input type="text" name="email" class="text" /> </div> <div class="input"> <label>Kommentar</label> <textarea name="kommentar" class="text textarea" /></textarea> </div> <div class="input"> <input type="submit" id="submit"/> <div class="loading_icon"></div> </div> </form> </div> </div> <div class="clear"></div> |
Nichts besonderes. Jedes Input Feld ist noch mit einem beschreibenden Label versehen. Zur einfacheren Gestaltung sind die einzelnen inputs mit ihren Labeln in einem div gehüllt. Die Divs mit der Klasse “loading_icon” und “done” sind zum Startzeitpunkt unsichtbar.
Das CSS dazu könnte man so umsetzen:
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | body{ text-align:center; } .loading_icon { float:right; background:url(ajax-loader.gif) no-repeat 1px; height:30px; width:30px; display:none; } .done { background:url(iconIdea.gif) no-repeat 2px; padding-left:20px; font-size:12px; width:70%; margin:20px auto; display:none } .clear {clear:both} .block { width:400px; margin:0 auto; text-align:left; } .input * { padding:5px; margin:2px; font-size:12px; } .input label { float:left; width:75px; font-weight:700 } .input input.text { float:left; width:270px; padding-left:20px; } .input .textarea { height:120px; width:270px; padding-left:20px; } .input #submit { float:right; margin-right:10px; } |
So. Nun können wir uns endlich um den AJAX-Request kümmern. Schauen wir uns an wie wir die Daten nun weiter verarbeiten und an das PHP-Skript weiterleiten.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | $(document).ready(function() { //click event für submit button ('#submit').click(function () { //Daten von den HTML Feldern in JS-Vars übersetzen var name = $('input[name=name]'); var email = $('input[name=email]'); var website = $('input[name=website]'); var comment = $('textarea[name=comment]'); //die Daten sollen per GET an das PHP Skript weitergeleitet werden. Dafür bauen wir einen //String var data = 'name=' + name.val() + '&email=' + email.val() + '&comment=' + encodeURIComponent(kommentar.val()); //alle Textfelder deaktivieren $('.text').attr('disabled','true'); //Icon während des Requests einblenden $('.loading_icon').show(); //Request abschicken $.ajax({ //Ort des Skriptes in dem die per GET übertragenen Daten verarbeitet werden sollen url: "saveData.php", //Angabe der GET Methode, auch POST wäre möglich. Allerdings nur sinnvoll //bei größeren Datenmengen type: "GET", //Daten die gesendet werden sollen data: data, //bei Antwort des Requests (Response) success: function (reqCode) { //wenn saveData.php true bzw. den Status 1 zurückliefert if (reqCode==1) { //verstecken des Formulars $('.form').fadeOut('slow'); //anzeigen der Erfolgsmeldung $('.done').fadeIn('slow'); //wenn der Request eine Form von false zurückschickt, Fehler ausgeben. } else{ alert('Fehler beim Abschicken des Formulares.'); } } }); return false; //der return wird benötigt, damit das Formular nicht tatsächlich abgeschickt wird und //sich nicht wie ein normales Form mit Seiten Refresh verhält. }); }); |
All magic is done
…
Ähnliche Artikel
16 Responses to “Formulare mit AJAX und jQuery – Ein kleines Tutorial”
Kommentare


























Beebo on April 22nd, 2009
Hallo,
nettes Beispiel, vielen Dank. Eine Demo oder sowas in der Art wäre noch cool.
Grüße aus Berlin
Bee
Manuel Graf on Mai 21st, 2009
hm…
//Angabe der GET Methode, auch POST wäre möglich. Allerdings nur sinnvoll
//bei größeren Datenmengen.
Nicht wirklich. Es ist nicht umsonst generell Konvention, dass alle Speicherdaten etc mit Post versendet werden. Das http Protocol hat ja nicht aus Jux GET, POST, PUT, DELETE etc… Get sollte nur zur Contentanfrage benutzt werden, also beispielsweise http://www.mysite.de/suche?kategorie=news&seite=3 …
zudem ne kleine addition:
statt return false KANN man (den sinn habe ich noch nicht herausgefunden bzw danach gesucht, aber es scheint einen zu geben) auch event.preventDefault() verwenden. Vielleicht ermöglich das einfach nur ne bessere Struktur in jQuery selber.
so long,
Manuel Graf
Stefan Huissel on Mai 22nd, 2009
Danke euch für die Kommentare.
@Manuel: Ja, da gebe ich dir recht. POST und GET haben tatsächlich jeweils ihre eigene Daseinsberechtigung. Über die Notwendigkeit von PUT kann man sich aber streiten, oder?
Allerdings gab es zu deren Einführungszeit noch kein AJAX bzw. Requestobjekte. Da man die GET-Parameter ja bei einem XMLHTTP-Request sowieso nicht in der URL zu Gesicht bekommt, verhalten sich beide Datenübergabemethoden auch i.A. gleich. Ausser eben bei größeren Datenmengen..
Bei einem früheren Projekt hatte ich das “type=GET” nicht als Fehlerquelle angesehen und stundenlang am restlichen Code und dem PHP Teil rumgeschraubt bis ich entdeckte, dass GET und POST unterschiedliche Datenvolumen übertragen können.
Danke dir für den Tip mit dem Return Wert. Werde das mal testen.
@Beebo: Richten uns gerade ne Testumgebung in unserem Blog ein. Dann wirds auch endlich paar Demos geben
Greetz
Stef
peter on November 26th, 2009
wo ist die demo?
Stefan Huissel on November 26th, 2009
Die gibts jetzt hier..
Rick on Dezember 9th, 2009
Tolles Tutorial.
Endlich mal eines, was auch wirklich verständlich ist!
Danke!
Rick
P.S: Warum ist die mailaddi nötig, wenn ich Dir ein Lob übermitteln will?
Rick on Dezember 9th, 2009
Anmerkung:
Ich merke gerade, dass mir die saveData.php als Code fehlt
Stefan Huissel on Dezember 14th, 2009
Dank dir fürs Lob. Wenn ich zukünftig dann auch benutzerfreundlichere Formulare in Websites vorfinde, hat es sich gelohnt
.
Der PHP Teil ist ganz simpel, ich mach demnächst mal kleines Downloadpackage fertig. Bis dahin poste den Code mal hier:
Stefan on Dezember 27th, 2009
Vielen dank für dein ausführliches und verständliches HowTo. Man findet zwar so einieges was das Thema behandelt aber überall fehlt meistens die genaue Erklärung. Man möchte ja schon wissen was einem dort vorgeführt wird.
Danke
Robert on Januar 18th, 2010
Sehr gutes Tutorial, verständlich und einfach nachzuvollziehen. So müssen Tutorials aussehen! Genau das richtige für Leute wie mich, die sich mit dem Senden und Empfangen von Formulardaten noch nie auseinandersetzen mussten. Danke!
bi0s on März 9th, 2010
Beste erklärung die ich nach drei Stunden googeln gefunden habe
Vielen vielen dank dafür !
Hast mich noch vor dem schlimmsten bewahrt, sonst wäre ich durchgedreht..
Bin schon seit ein paar Stunden am Experimentieren
Ingo Fahrentholz on April 26th, 2010
Suuuper danke dafür !!!
Nickel715 on Juni 26th, 2010
es hat zwar auf anhieb nicht funktioniert aber nach dem ich dann alle fehler im code gefixt habe gings… danke für das simple tutorial
dude76 on Juli 14th, 2010
Hi,
finde das Tutorial auch super. Habe nur folgendes
Problem:
Ich möchte ein Formular innerhalb eines DIV das als Overlay angezeigt wird an den Server per POST verschicken.
Wie mache ich das die Ausgabe wieder direkt in diesem DIV erscheint, so das keine neue Seite
geladen wird?
mirage2000 on Juli 23rd, 2010
sieht gut aus hab auch getestet nur bei mir kommt ständig fehler, dass angeblich nicht geschickt werden konnte.
was bedeutet die hier:
//wenn saveData.php true bzw. den Status 1 zurückliefert
if (reqCode==1) {….
was muss savedata.php zurückliefern?
Stefan Huissel on Juli 27th, 2010
Das ist die Antwort des PHP-Skripts. Alles war in php mittels echo ausgegeben wird, landet in diesem Fall in der js-Variablen reqCode. Die 1 ist sozusagen eine Minimalform des geplanten Error-Handling, wobei 1 kein Fehler bedeutet.
Bei dir scheint es ein Problem im PHP-Teil zu geben. Der nicht unbedingt beste, aber schnellste Weg wäre es einfach den reqCode mittels einem js-alert innerhalb von “success” auszugeben. Da würdest du dann vom Skript nicht abgefangene PHP Fehlermeldungen sehen können.
Greetz