//重构XMLHttpRequest
var net = new Object(); //名字空間對象
net.READY_STATE_UNINITIALIZED = 0;
net.READY_STATE_LOADING = 1;
net.READY_STATE_LOADED = 2;
net.READY_STATE_INTERACTIVE = 3;
net.READY_STATE_COMPLETE = 4;
net.ContentLoader = function(url, onload, onerror) { //構造函數
this.url = url;
this.req = null;
this.onload = onload;
this.onerror = (onerror) ? onerror : this.defaultError;
this.loadXMLDoc(url);
}
net.ContentLoader.prototype = {
loadXMLDoc: function(url) { //重新命名的initXMLHttpRequest函數
if (window.XMLHttpRequest) { //重構過的loadXML函數
this.req = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
this.req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (this.req) {
try {
var loader = this;
this.req.onreadystatechange = function() {
loader.onReadyState.call(loader);
}
this.req.open('GET', url, true); //重構過的sendRequest函數
this.req.send(null);
} catch (err) {
this.onerror.call(this);
}
}
},
onReadyState: function() { //重構過的回調函數
var req = this.req;
var ready = req.readyState;
if (ready == net.READY_STATE_COMPLETE) {
var httpStatus = req.status;
if (httpStatus == 200 || httpStatus == 0) {
this.onload.call(this);
} else {
this.onerror.call(this);
}
}
},
defaultError: function() {
alert("error fetching data!"
+ "
readyState:" + this.req.readyState
+ "
status:" + this.req.status
+ "
headers:" + this.req.getAllResponseHeaders());
}
}
function myCallBack() {
alert{this.url
+" loaded! Here's the content:
"
+this.req.responseText};
}