Home | Projects | Tutorials | Articles | live chat | Submit Project | Big Vote
 
Ajax Projects
.NET Frameworks
Java Frameworks
PHP Frameworks
Ruby Frameworks
Other Frameworks
Cool AJAX sites
Ajax Resources
Ajax Tools
JavaScript frameworks
Partners

 Home /  Tutorials / Create a Ajax based Form Submission with jQuery

Create a Ajax based Form Submission with jQuery





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.

Read The Full Tutorial.
































AJAX

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:

    * Reduce connections and bandwidth to the server, images, scripts, stylesheets only need to be downloaded once
    * Reduce loading timew. User doesnt have to load pages again and again, it all happens in a same page!
    * Increase responsiveness and end user experiences.

Usability Guidelines:

    * Always provide feedback to user. Let user know the server is processing the request. Indicate that using message or loading icon.
    * Prepare a plan to those users without Javascript support.

Introduction

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

In this sample, I'll keep everything as simple as possible. This is how it looks like
view plaincopy to clipboardprint?

   1. <div class="block"> 
   2. <div class="done"> 
   3. <b>Thank you !</b> We have received your message.  
   4. </div> 
   5.     <div class="form"> 
   6.     <form method="post" action="process.php"> 
   7.     <div class="element"> 
   8.         <label>Name</label> 
   9.         <input type="text" name="name" class="text" /> 
  10.     </div> 
  11.     <div class="element"> 
  12.         <label>Email</label> 
  13.         <input type="text" name="email" class="text" /> 
  14.     </div> 
  15.     <div class="element"> 
  16.         <label>Website</label> 
  17.         <input type="text" name="website" class="text" /> 
  18.     </div> 
  19.     <div class="element"> 
  20.         <label>Comment</label> 
  21.         <textarea name="comment" class="text textarea" /></textarea> 
  22.     </div> 
  23.     <div class="element"> 
  24.          
  25.         <input type="submit" id="submit"/> 
  26.         <div class="loading"></div> 
  27.     </div> 
  28.     </form> 
  29.     </div> 
  30. </div> 
  31. <div class="clear"></div> 

<div class="block">
<div class="done">
<b>Thank you !</b> We have received your message.
</div>
 <div class="form">
 <form method="post" action="process.php">
 <div class="element">
  <label>Name</label>
  <input type="text" name="name" class="text" />
 </div>
 <div class="element">
  <label>Email</label>
  <input type="text" name="email" class="text" />
 </div>
 <div class="element">
  <label>Website</label>
  <input type="text" name="website" class="text" />
 </div>
 <div class="element">
  <label>Comment</label>
  <textarea name="comment" class="text textarea" /></textarea>
 </div>
 <div class="element">
  
  <input type="submit" id="submit"/>
  <div class="loading"></div>
 </div>
 </form>
 </div>
</div>
<div class="clear"></div>

2. CSS

I'm using CSS to make the 2 columns layout - LABEL and Form Elements. Also, some important classes:

    * .hightlight: Error indicator. if user had not entered anything in the textfield, it will highlight it and display an error icon
    * .loading: Loading animation icon. After user clicked on submit, if no errors were found, this icon will be displayed next to the submit button
    * .done: Success message. If the form is submitted successfully, display show this class

view plaincopy to clipboardprint?

   1. body{text-align:center;} 
   2.  
   3. .clear {clear:both} 
   4.  
   5. .block { 
   6.     width:400px; 
   7.     margin:0 auto; 
   8.     text-align:left; 
   9. } 
  10. .element * { 
  11.     padding:5px;  
  12.     margin:2px;  
  13.     font-family:arial; 
  14.     font-size:12px; 
  15. } 
  16. .element label { 
  17.     float:left;  
  18.     width:75px; 
  19.     font-weight:700 
  20. } 
  21. .element input.text { 
  22.     float:left;  
  23.     width:270px; 
  24.     padding-left:20px; 
  25. } 
  26. .element .textarea { 
  27.     height:120px;  
  28.     width:270px; 
  29.     padding-left:20px; 
  30. } 
  31. .element .hightlight { 
  32.     border:2px solid #9F1319; 
  33.     background:url(iconCaution.gif) no-repeat 2px 
  34. } 
  35. .element #submit { 
  36.     float:right; 
  37.     margin-right:10px; 
  38. } 
  39. .loading { 
  40.     float:right;  
  41.     background:url(ajax-loader.gif) no-repeat 1px;  
  42.     height:28px;  
  43.     width:28px;  
  44.     display:none; 
  45. } 
  46. .done { 
  47.     background:url(iconIdea.gif) no-repeat 2px;  
  48.     padding-left:20px; 
  49.     font-family:arial; 
  50.     font-size:12px;  
  51.     width:70%;  
  52.     margin:20px auto;  
  53.     display:none 
  54. } 

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
}

3. Javascript

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:

    * Get user's input
    * Validate the data, if error found, add the hightlight class, and stop the script
    * If no errors were found, all text field will be disabled and format the data to be passed to jQuery ajax method
    * jQuery will appened the data to process.php, so it will look something like this:

      http://[your-website-url]/process.php?name=kevin&email=kevin@test.com&website=http://www.queness.com&comment=Testing%20of%20Ajax%20Form%20Submission
      in fact, you can execute the process.php with that url.
    * process.php will return either 1 or 0, if 1 it meant mail was sent successfully, otherwise, mail was not sent.
    * If suceed, the form will be hidden and a message is displayed.

view plaincopy to clipboardprint?

   1. $(document).ready(function() { 
   2.      
   3.     //if submit button is clicked 
   4.     $('#submit').click(function () {         
   5.          
   6.         //Get the data from all the fields 
   7.         var name = $('input[name=name]'); 
   8.         var email = $('input[name=email]'); 
   9.         var website = $('input[name=website]'); 
  10.         var comment = $('textarea[name=comment]'); 
  11.  
  12.         //Simple validation to make sure user entered something 
  13.         //If error found, add hightlight class to the text field 
  14.         if (name.val()=='') { 
  15.             name.addClass('hightlight'); 
  16.             return false; 
  17.         } else name.removeClass('hightlight'); 
  18.          
  19.         if (email.val()=='') { 
  20.             email.addClass('hightlight'); 
  21.             return false; 
  22.         } else email.removeClass('hightlight'); 
  23.          
  24.         if (comment.val()=='') { 
  25.             comment.addClass('hightlight'); 
  26.             return false; 
  27.         } else comment.removeClass('hightlight'); 
  28.          
  29.         //organize the data properly 
  30.         var data = 'name=' + name.val() + '&email=' + email.val() + '&website=' 
  31.         + website.val() + '&comment='  + encodeURIComponent(comment.val()); 
  32.          
  33.         //disabled all the text fields 
  34.         $('.text').attr('disabled','true'); 
  35.          
  36.         //show the loading sign 
  37.         $('.loading').show(); 
  38.          
  39.         //start the ajax 
  40.         $.ajax({ 
  41.             //this is the php file that processes the data and send mail 
  42.             url: "process.php",  
  43.              
  44.             //GET method is used 
  45.             type: "GET", 
  46.  
  47.             //pass the data          
  48.             data: data,      
  49.              
  50.             //Do not cache the page 
  51.             cache: false, 
  52.              
  53.             //success 
  54.             success: function (html) {               
  55.                 //if process.php returned 1/true (send mail success) 
  56.                 if (html==1) {                   
  57.                     //hide the form 
  58.                     $('.form').fadeOut('slow');                  
  59.                      
  60.                     //show the success message 
  61.                     $('.done').fadeIn('slow'); 
  62.                      
  63.                 //if process.php returned 0/false (send mail failed) 
  64.                 } else alert('Sorry, unexpected error. Please try again later.');                
  65.             }        
  66.         }); 
  67.          
  68.         //cancel the submit button default behaviours 
  69.         return false; 
  70.     });  
  71. });  

$(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;
 }); 
}); 

4. PHP

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:

    * Retrieve user's input from either GET or POST method
    * If POST, set the $post variable to 1. This is to display the message instead of return the result
    * Then, perform the server side validation if the form was submitted using POST
    * If no errors were found, organize the data into a html email template and send it to the email we have specified.
    * Display the message if POST is used. Display result (either 1 or 0) if GET is used

 

hhhh Says:
Mon Apr 06, 2009 8:34 am
Says:
Mon Apr 06, 2009 9:56 am
Says:
Tue Apr 07, 2009 8:31 pm
jewel Says:
Fri Apr 10, 2009 3:37 am
not understand anything
at least specify howmany files and which are they and what there filenames and extension and from where to where these files start and ends
without this ask to leave a comment means simply wasting our time
sorry for the comments
Says:
Fri Apr 10, 2009 6:16 pm
Says:
Mon Apr 13, 2009 9:57 am
Says:
Mon Apr 13, 2009 10:28 am
Says:
Mon Apr 20, 2009 1:25 am
Says:
Mon Apr 20, 2009 1:25 am
Says:
Mon Apr 20, 2009 8:19 am
Says:
Fri May 15, 2009 8:36 pm
Says:
Wed May 20, 2009 5:13 pm
Says:
Wed May 20, 2009 5:13 pm
Says:
Sun May 31, 2009 8:20 pm
Says:
Sun May 31, 2009 8:20 pm
Says:
Sun May 31, 2009 8:20 pm
Says:
Wed Jun 03, 2009 12:56 am
dfgh Says:
Wed Jun 03, 2009 12:57 am
dfh
dfgh Says:
Wed Jun 03, 2009 1:05 am
dfh
Says:
Mon Jun 29, 2009 1:13 am
Says:
Sun Jul 05, 2009 6:00 am
Says:
Sun Jul 19, 2009 11:55 am
Says:
Tue Jul 21, 2009 10:04 pm
Says:
Tue Jul 21, 2009 10:04 pm
Says:
Sat Jul 25, 2009 11:53 am
Says:
Mon Sep 14, 2009 4:24 pm
Says:
Mon Sep 14, 2009 4:26 pm
ghj Says:
Thu Oct 08, 2009 8:57 pm
fgjh
sgf Says:
Wed Oct 21, 2009 3:14 am
asdfsa
mowar Says:
Thu Oct 22, 2009 8:21 am
hi very fine
sdf Says:
Thu Oct 22, 2009 8:27 am
sdfsd
Says:
Thu Oct 22, 2009 8:28 am
neon tabela Says:
Thu Oct 22, 2009 5:36 pm
Everything is very open and very clear explanation of issues. was truly information. Your website is very useful. Thanks for sharing.
Says:
Sat Oct 24, 2009 3:43 am
jh
Says:
Mon Dec 14, 2009 6:46 am
Says:
Mon Dec 14, 2009 11:35 am
dfgdfgd Says:
Mon Dec 14, 2009 1:40 pm
tetsstst
Says:
Tue Dec 15, 2009 5:58 am

Leave Your Comment

Name (Required)
Mail (will not be published) (required)
Website
AddThis Social Bookmark Button
Top Projects
MSN Web Messenger
MessengerFX
ebuddy
e-messenger
ILoveIM
AJAX file upload
You Tube
KoolIM.com
Meebo
Ajax.NET Professional
Tutorials
The AJAX Revolution. Join in.
dojox.analytics for developers and more
HTTP Form POST Request using AJAX and Servlet
Web design tutorials :How to Sort table rows using Ajax Javascript
Creating Huge Bookmarklets
Tableless Web Page Design Using CSS
ASP.NET AJAX Library Beta in Visual Studio
Printing in Silverlight 2 using CSS and ASP.NET AJAX 4
Creating a chat script with PHP and Ajax, part 1
Ajax RSS reader