Saturday, April 16, 2005

AJAX: XMLHTTPRequest Event Handling

Most of the XMLHTTPRequest uses the following implementation:
function run1() {
xmlhttp = new XMLHTTPRequest();
xmlhttp.onreadystatechange = processStateChange;
...
}

function processStateChange() {
if (xmlhttp.readyState == 4) ...
}
The problem is, when you have many events to handle, the variable xmlhttp in run1 may have assigned to different instances by different functions (e.g. run2, run3, etc). If you rely on this code, no one can gaurentee that your code will run correctly.

The resolve this problem you can try to write the code in this way:

function run1() {
var xmlhttp = new XMLHTTPRequest();
xmlhttp.onreadystatechange = function() { ... }
}
If you insist to write the handle in a function, here is another style of writing it:
function run1() {
var xmlhttp = new XMLHTTPRequest();
xmlhttp.onreadystatechange = function() {
processStateChange(xmlhttp);
}
...
}

function processStateChange(xmlhttp) { ... }

No comments: