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
…










Letzte Kommentare