分类:
2009-04-03 21:46:19
AJAX has changed the world of web development. Look at digg, facebook and gmail, thery are good examples to show the capability of AJAX. AJAX can create a highly responsive web interface and increase the user experience.
AJAX is abbrieviated from Asynchrounous javascript and XML. It's not a new technology, but the implementation of a group of technologies to achieve a seamless interaction between client and server.
Typically, xhtml and css to present the information, javascript is used to handle user interactions, and a server side language to perform the users' requests (and normally return data in XML format, in this tutorial, we won't do that), and it all is happening in the background using the Javascript XMLHttpRequest. Javascript plays a main role tie all these technologies together and create the asynchronous interaction between client ans server.
Advantages:So, you know about the goodness of AJAX. Let's learn a simple way to implement it.
In this tutorial, we will learn form submission using jQuery without navigate out from the page. It accepts user input, processes it and sends it to a php file called "process.php". The PHP script will send a notification email to the recipient. Of course, in case browser couldn't support javascript/XMLHttpRequest, we have a second plan ready, the form will submit the data using the normal form submission.
How do we do that? Easy, we specified POST and ACTION attributes in the FORM element, if browsers couldn't support it, that will submit the form straight away. If the browsers could support it, the javascript will cancel the submit button default behaviour. And we need to code the PHP script to support both GET and POST methods and produce the result accordingly.
In this sample, I'll keep everything as simple as possible. This is how it looks like
Thank you ! We have received your message.
I'm using CSS to make the 2 columns layout - LABEL and Form Elements. Also, some important classes:
body{text-align:center;} .clear {clear:both} .block { width:400px; margin:0 auto; text-align:left; } .element * { padding:5px; margin:2px; font-family:arial; font-size:12px; } .element label { float:left; width:75px; font-weight:700 } .element input.text { float:left; width:270px; padding-left:20px; } .element .textarea { height:120px; width:270px; padding-left:20px; } .element .hightlight { border:2px solid #9F1319; background:url(iconCaution.gif) no-repeat 2px } .element #submit { float:right; margin-right:10px; } .loading { float:right; background:url(ajax-loader.gif) no-repeat 1px; height:28px; width:28px; display:none; } .done { background:url(iconIdea.gif) no-repeat 2px; padding-left:20px; font-family:arial; font-size:12px; width:70%; margin:20px auto; display:none }
Finally, the Javascript code. I have added comments in each line to explain what it does.
First, we need a simple validation to ensure user has key in something. We can add more validations, like, email validation, valid character validation, length validation and so on. And it's a good practise to encode the data into URL friendly format as well.
What the code does:
http://[your-website-url]/process.php?name=kevin&email=kevin@test.com&website=%20of%20Ajax%20Form%20Submission
in fact, you can execute the process.php with that url.$(document).ready(function() { //if submit button is clicked $('#submit').click(function () { //Get the data from all the fields var name = $('input[name=name]'); var email = $('input[name=email]'); var website = $('input[name=website]'); var comment = $('textarea[name=comment]'); //Simple validation to make sure user entered something //If error found, add hightlight class to the text field if (name.val()=='') { name.addClass('hightlight'); return false; } else name.removeClass('hightlight'); if (email.val()=='') { email.addClass('hightlight'); return false; } else email.removeClass('hightlight'); if (comment.val()=='') { comment.addClass('hightlight'); return false; } else comment.removeClass('hightlight'); //organize the data properly var data = 'name=' + name.val() + '&email=' + email.val() + '&website=' + website.val() + '&comment=' + encodeURIComponent(comment.val()); //disabled all the text fields $('.text').attr('disabled','true'); //show the loading sign $('.loading').show(); //start the ajax $.ajax({ //this is the php file that processes the data and send mail url: "process.php", //GET method is used type: "GET", //pass the data data: data, //Do not cache the page cache: false, //success success: function (html) { //if process.php returned 1/true (send mail success) if (html==1) { //hide the form $('.form').fadeOut('slow'); //show the success message $('.done').fadeIn('slow'); //if process.php returned 0/false (send mail failed) } else alert('Sorry, unexpected error. Please try again later.'); } }); //cancel the submit button default behaviours return false; }); });
This PHP code can accomodate different type of submissions (POST and GET). If the user submitted the form using jQuery, process.php will get the data from GET. and if the browser couldn't run javascript, the data will be sent using POST. What it does:
'; //sender $from = $name . ' <' . $email . '>'; //subject and the html message $subject = 'Comment from ' . $name; $message = '
Name | ' . $name . ' |
' . $email . ' | |
Website | ' . $website . ' |
Comment | ' . nl2br($comment) . ' |
Now you know how to build a ajax based form submission that will work even if the browser doesnt support javascript using jQuery. Make sure you check out the demo and download the source code to play with it. Last but not least, I need your support :) If you like this article, please help me to promote it by adding this post into your bookmark. Or you can subscribe to my for more posts. Thanks!