Basics of AJAX

ajax-logo-128

Level: intermediate

Welcome to the next article where we will discuss the basics of this, what changed JavaScript for ever.

Basics of AJAX

The AJAX (Asynchronous JavaScript and XML) – is a technology of web application development, in which the user can interact with the server without reloading the entire document. Operations are done asynchronously.

AJAX technology consists of several elements:

– XMLHttpRequest – an object allowing asynchronous transmission of data over the network. During processing the user can perform other tasks, also retrieve data from multiple sources.

– JavaScript – the language well known to us, although in the assumption it could be a different client-side language with DOM support, e.g. VBScript.

– XML – markup language as data carrier of sent and/or received information. In addition to the XML also other formats are used, such as JSON, although the data carrier can also be plain text or HTML snippets. For the Ajax with JSON there is even a special term: AJAJ.

Practical AJAX

Below we presented a basic example of using AJAX. Classical, in pure JavaScript i.e. without frameworks.

var httpRequest;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}

httpRequest = new XMLHttpRequest();
httpRequest.overrideMimeType('text/xml');

// define a getter function:
httpRequest.onreadystatechange = name;

// or another way:
httpRequest.onreadystatechange = function() {
    // definition 
    alert('Test');
};

The open() method:

// true in the 3rd parameter = the request is asynchronous
httpRequest.open('GET', 'http://www.example.org/some.file', true);

Examples of using the open() method:

r.open('GET', 'mysite.jsp', true);
r.open('GET', 'myfile.jpg', true);
r.open('GET', 'http://www.example.net/get.php?id=123', true);

Sending the data – send():

httpRequest.send(null);

The send() method has one parameter: data appended to the query. This parameter must be used for the POST method. We use null if the method used is GET.

If you want to send data using the POST method, you should change MIME of the request:

httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

Capturing of reaction – callback

And here we go with the magic! It’s time to operate on the document and perform changes without reloading the page.

Example – a callback:

if (httpRequest.readyState == 4) {
    // everything OK, data received
    alert('OK');
} else {
    // not ready yet
    alert('Please wait...');
}

We check the state by comparing the value.

List of values for readyState:

0 – (uninitialized)
1 – (loading)
2 – (loaded)
3 – (interactive)
4 – (complete)

if (httpRequest.status == 200) {
    // ok
} else {
    // a problem, e.g. Error 404 or Error 500
}


Working with XML

This example shows how to parse XML simple structure that serves as an information carrier.

<?xml version="1.0" ?>
<root>
  Test data
</root>

// ... AJAX initialization (shown above) ... 
makeRequest('test.xml');
// ...

var xmldoc = httpRequest.responseXML;
var root_node = xmldoc.getElementsByTagName('root').item(0);
alert(root_node.firstChild.data);

The XMLHTTPRequest object

Let’s see what the XMLHTTPRequest object hides.

Methods:

abort() – cancels the current request

getAllResponseHeaders() – returns a complete set of HTTP headers as a string

getResponseHeader( headerName ) – returns the value of a specific HTTP header

open( method, URL ) – specifies the method, URL, and other optional arguments of the request

open( method, URL, async ) – ‘async’ is a logical value to specify the mode (synchronous / asynchronous)

open( method, URL, async, userName )

open( method, URL, async, userName, password ) – the ‘method’ argument may have a value: “GET”, “POST”, “HEAD”, “PUT”, “DELETE” or other HTTP methods listed in the W3C specification

The URL argument can be either relative or absolute address.

The “async” argument determines whether the request should be processed synchronously or not. For value of 1 (true) the script will continue work after the send() method call, for value of 0 (false) the script will be processed after receiving the response.

send( content ) – sends a request

setRequestHeader( headerName, headerContent ) – adds a pair of header / content to HTTP requests

 

Properties of the XMLHTTPRequest object:

onreadystatechange – specifies a reference to the function performed at each change of the readyState

readyState – contains the status of the object, as follows:

0 = uninitialized
1 = open
2 = request sent
3 = receiving a response
4 = request completed – ready

responseText – contains the answer as text

responseXML – contains the answer as XML; this property returns XML document that can be parsed using the classes and interfaces of the W3C DOM

status – contains the HTTP response code as a number (404, 200, etc)

statusText – contains the status as a string (e.g. “Not Found” or “OK”).

Example – XML processing:

<?xml version="1.0" encoding=" utf-8"?>
<bookList xmlns="http://site1.com" xmlns:pub="http://site2.com">
  <book isbn="011111111">
    <title>Ajax. Programming.</title>
    <author>John Doe, Evan Brown</author>
    <pub:name>Coder Publishing</pub:name>
  </book>
  <book isbn="022222222">
    <title>JS Coding for Geeks</title>
    <author>Fred Al Fred</author>
    <pub:name>Xorw</pub:name>
  </book>
</bookList>

Getting the data – example of using XPath:


var sNameSpace = "xmlns:na='http://site1.com' xmlns:pub='http://site2.com'";
oXmlDom.setProperty("SelectionNamespaces", sNameSpace);

var oRoot = oXmlDom.documentElement;
var sXPath = "na:book/pub:name";
var cPublishers = oRoot.selectNodes(sXPath);

if (cPublishers.length < 0) {
    alert(cPublishers.length + " <pub:name/> elements found with " 
            + sXPath);
}

Summary

AJAX is a very vast subject. Today it is ubiquitous, but I remember those times when this technology freshly became popular, and what impression could be done by the effects based on AJAX.

Soon we will describe JavaScript frameworks, which containing also support for AJAX programming. And this is great, because the programmer can easily create the final result, without going into details of the XMLHTTPRequest (as we did today).

My favorite solutions are those offered by jQuery.

We strongly encourage you to follow the subsequent entries.

Web and Mobile Software Developer, with years of experience. My biggest passions are programming, new technologies, e-commerce, as well sports, cars, and of course my family.

Facebook Twitter LinkedIn Google+ Skype Xing 

Share: Share on Facebook1Tweet about this on TwitterShare on Google+0Share on LinkedIn1Share on Tumblr0Digg thisEmail this to someonePin on Pinterest1
Both comments and pings are currently closed.

Comments are closed.