Ajax Tutorial
Ajax Tutorial
Ajax is a catchy name for a type of programming made popular in 2005 by Google and other big
web developers. Ajax loosely stands for Asynchronous Javascript And XML, but that just
sounds like techno jargon to many people.
If you wanted to get any information from a database on the server, or send user information to a
server-side script like PHP, you had to make an HTML form to GET or POST data to the server.
The user would then have to click "Submit", wait for the server to respond, then a new page
would load with the results. I'm sure we have all gotten slightly annoyed when having to wait for
especially slow websites!
Ajax attempts to remedy this problem by letting your Javascript communicate directly with the
server, using a special Javascript object XMLHttpRequest. With this object, your Javascript can
get information from the server without having to load a new page!
This tutorial will introduce you to the basics of Ajax and show you how to send and receive data
from a server without using a "Submit" button approach.
Below is the HTML code for your "order.html" webpage. If you would like to refresh your
knowledge of forms, then check out our HTML forms lesson.
<form name='myForm'>
Name: <input type='text' name='username' /> <br />
Time: <input type='text' name='time' />
</form>
</body>
</html>
Now that we have our HTML form, we can dive deeper into the Ajax jungle and try to discover
what we're facing.
In the following code we are going to "try" three different ways to make a new XMLHttpRequest
object. Every time we fail and get an error, we will catch the error and try the next a different
command.
Note: If our "try" is successful then the "catch" code will not be run because it is only used when
there is an error.
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new
ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
}
//-->
</script>
<form name='myForm'>
Name: <input type='text' name='username' /> <br />
Time: <input type='text' name='time' />
</form>
</body>
</html>
In the above Javascript code, we try three times to make our XMLHttpRequest object. Our first
attempt:
is for the Opera 8.0+, Firefox and Safari browsers. If that fails we try two more times to make the
correct object for an Internet Explorer browser with:
If that doesn't work, then they are using a very outdated browser that doesn't support
XMLHttpRequest, which also means it doesn't support Ajax.
Most likely though, our variable ajaxRequest will now be set to whatever XMLHttpRequest
standard the browser uses and we can start sending data to the server.
The next lesson will teach you how to use your XMLHttpRequest object (which is currently
stored in ajaxRequest variable) to communicate with the server.
We will be filling this function in throughout the lesson, as you learn more about the
XMLHttpRequest object.
Javascript Code:
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
// We still need to write some code here
}
This property, onreadystatechange, stores a function. As the name sort of implies, every time the
"ready state" changes this function will be executed. What is this "ready state" and is it any use
to us?
The only readyState that we are going to care about in this lesson is when our response is
complete and we can get our hands on that information. So let's add an If Statement to our
function to check if the response is complete.
Note: When the property readyState is 4 that means the response is complete and we can get our
data.
Javascript Code:
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
// Get the data from the server's response
}
}
Now that we know how to check if the response is complete, we can access the property that
stores the server's response, responseText.
In case you forgot, this tutorial is using Ajax to set an HTML text box to the server's time. The
HTML input we want to change is the "time" text box. Here's a little refresher on how to access
form inputs with Javascript:
document.FormName.InputName.value
Our form's name is "myForm" and the text box is "time". Below is the code that will set our
"time" text box to the server's time.
Javascript Code:
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
document.myForm.time.value = ajaxRequest.responseText;
}
}
Phew! That was a lot of new things we had to use to get our server's response, but now we can
rest easy knowing we are ready to send off a request to the server. Using Ajax, we can now ask
our server for some data!
1. Specify the URL of server-side script that will be used in our Ajax application.
2. Use the send function to send off the request.
Our simple PHP script, that we have yet to write, will be called "serverTime.php", so we can
already do step 1. The URL is set using the open method, which takes three arguments. The
second argument is the important one, as it is the URL of our PHP script.
Assuming that the HTML and PHP files are in the same directory, the code would be:
Javascript Code:
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
document.myForm.time.value = ajaxRequest.responseText;
}
}
ajaxRequest.open("GET", "serverTime.php", true);
With all of our Javascript setup work complete, we can then use the send method to send our
request to the server.
Javascript Code:
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
document.myForm.time.value = ajaxRequest.responseText;
}
}
ajaxRequest.open("GET", "serverTime.php", true);
ajaxRequest.send(null);
Using the onChange attribute, we can make it so our function is called whenever the user makes
a change to the "username" text box.
Javascript Code:
<input type='text' onChange="ajaxFunction();" name='username' /> <br />
OK, now we are ready to completely update our "order.html" file to be 100% Ajax ready.
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new
ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
document.myForm.time.value = ajaxRequest.responseText;
}
}
ajaxRequest.open("GET", "serverTime.php", true);
ajaxRequest.send(null);
}
//-->
</script>
<form name='myForm'>
Name: <input type='text' onChange="ajaxFunction();" name='username' /> <br />
Time: <input type='text' name='time' />
</form>
</body>
</html>
Display of order.html:
Name:
Time:
Sweet! The time text box pulled down the server's time from "serverTime.php" without having to
reload the entire page! Congratulations you've just written your first fully-functional Ajax
application!
Create a new database or use an existing one and then import the table ajax_example.sql to that
database. This sql file will create the table ajax_example and insert all the data rows. The table
has four columns:
Update order.html
We want to be able to build queries from our HTML file, so there are a few form elements that
will need to be added. The three inputs we are going to implement are:
Maximum Age (Text Input) - Let the user select the maximum age to be returned.
Maximum WPM (Text Input) - Let the user select the maximum wpm to returned.
Gender (Select Input) - Let the user select the gender of a valid person.
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new
ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
document.myForm.time.value = ajaxRequest.responseText;
}
}
var age = document.getElementById('age').value;
var wpm = document.getElementById('wpm').value;
var sex = document.getElementById('sex').value;
var queryString = "?age=" + age + "&wpm=" + wpm + "&sex=" + sex;
ajaxRequest.open("GET", "ajax-example.php" + queryString, true);
ajaxRequest.send(null);
}
//-->
</script>
<form name='myForm'>
Max Age: <input type='text' id='age' /> <br />
Max WPM: <input type='text' id='wpm' />
<br />
Sex: <select id='sex'>
<option>m</option>
<option>f</option>
</select>
<input type='button' onclick='ajaxFunction()' value='Query MySQL' />
</form>
</body>
</html>
If the new Javascript code is foreign to you, be sure to check out our lesson on Javascript's
getElementById Function.
http://www.tizag.com/somescript.php?variable1=value1&variable2=value2
The left side of the equals operator is the variable name and the right side is the variable's value.
Also, each variable is separated with an ampersand &.
For example, if we wanted to send the variables age, sex, and wpm with values 20, f, 40 to our
PHP script ajax-example.php then our URL would look like:
http://www.tizag.com/ajax-example.php?age=20&sex=f&wpm=40
Now we need to build a new PHP script to take these variables and run a MySQL query for us.
ajax-example.php Code:
<?php
$dbhost = "localhost";
$dbuser = "dbusername";
$dbpass = "dbpassword";
$dbname = "dbname";
//Connect to MySQL Server
mysql_connect($dbhost, $dbuser, $dbpass);
//Select Database
mysql_select_db($dbname) or die(mysql_error());
// Retrieve data from Query String
$age = $_GET['age'];
$sex = $_GET['sex'];
$wpm = $_GET['wpm'];
// Escape User Input to help prevent SQL Injection
$age = mysql_real_escape_string($age);
$sex = mysql_real_escape_string($sex);
$wpm = mysql_real_escape_string($wpm);
//build query
$query = "SELECT * FROM ajax_example WHERE ae_sex = '$sex'";
if(is_numeric($age))
$query .= " AND ae_age <= $age";
if(is_numeric($wpm))
$query .= " AND ae_wpm <= $wpm";
//Execute query
$qry_result = mysql_query($query) or die(mysql_error());
}
echo "Query: " . $query . "<br />";
$display_string .= "</table>";
echo $display_string;
?>
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new
ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
var ajaxDisplay = document.getElementById('ajaxDiv');
ajaxDisplay.innerHTML = ajaxRequest.responseText;
}
}
var age = document.getElementById('age').value;
var wpm = document.getElementById('wpm').value;
var sex = document.getElementById('sex').value;
var queryString = "?age=" + age + "&wpm=" + wpm + "&sex=" + sex;
ajaxRequest.open("GET", "ajax-example.php" + queryString, true);
ajaxRequest.send(null);
}
//-->
</script>
<form name='myForm'>
Max Age: <input type='text' id='age' /> <br />
Max WPM: <input type='text' id='wpm' />
<br />
Sex: <select id='sex'>
<option value='m'>m</option>
<option value='f'>f</option>
</select>
<input type='button' onclick='ajaxFunction()' value='Query MySQL' />
</form>
<div id='ajaxDiv'>Your result will display here</div>
</body>
</html>
Display:
Max Age:
Max WPM:
Sex:
If you have successfully completed this advanced Ajax lesson then you know how to use
MySQL, PHP, HTML, and Javascript in tandem to write Ajax applications.
Be sure to save this file to the directory "tizagASP" as was mentioned in the previous lesson,
Running ASP.
Launch Internet Explorer and type the following into the address bar:
http://localhost/tizagASP/firstscript.asp
...then you've got all the file saving and running mumbo jumbo figured out and you can start
focusing on learning ASP! Now let's continue!