Understanding Ajax: Page 3
Understanding Ajax: Getting Started
Table 2-1 shows the possible values for the
readyState variable. It will return a number representing the current state of the object. Each request will progress through the list of
Status of the
The object has been created but not initialized. (The
The object has been created, but the
Some data has been received. Calling the
All the data has been received, and the complete data is available in the
readyState variable and the
onreadystatechange event handler are linked in such a way that each time the
readyState variable is changed, the
onreadystatechange event handler is called.
One of the attributes that have made
XMLHttpRequest such a popular transport for Ajax requests is that it is easy to use in a way that is compatible across multiple browsers. The big two browsers, IE and Firefox, provide the same basic API. This consistency makes for a similar development experience. Opera and Safari also support the same basic API, but only in their more recent versions.
When you are writing cross-browser, the first problem you need to overcome is that
XMLHTTP ActiveX object, if needed. This helps make our implementation as robust as possible. The function also throws an exception if it’s not possible to create an
XMLHttpRequest object. This gives us a way to give error messages or to fall back to
IFrame requests, if needed.
Listing 2-1 Cross-Browser
The overall pattern of this code is simple: Create an
XMLHttpRequest instance in the most optimal way possible, as shown in line 6. This creation should always succeed on Mozilla-based browsers, such as Firefox, on Opera, and on the upcoming IE 7.
XMLHttpRequest doesn’t exist, catch the exception that is thrown, as shown in line 7. Getting an exception means you’re on IE or an old browser. To test for IE, attempt to create an ActiveX version of
XMLHttpRequest, which is accomplished by the following:
- Looping over all possible ActiveX identifiers. This action will create an ActiveX instance for each identifier until the creation succeeds, setting the success flag to
true, as shown in lines 9–20.
- If creation is successful, returning an
This approach allows for minimal overhead if the browser supports a native
XMLHttpRequest object while fully supporting IE. It also gives us an error if
XMLHttpRequest isn’t supported at all. This error could be displayed to the user at this point, or you could insert another communication approach, such as hidden