+ -
当前位置:首页 → 问答吧 → 用面向对象的方式写了个Ajax,回调函数报错,高人给看看

用面向对象的方式写了个Ajax,回调函数报错,高人给看看

时间:2011-02-22

来源:互联网

JScript code

function Ajax(callback) {
    this.xmlreq = this.getXMLRequest();
    this.callback = callback;
}

/*
 * 获取XMLHttpRequest对象
 */
Ajax.prototype.getXMLRequest = function() {
    var xmlHttpRequest = null;
    if (window.XMLHttpRequest) {
        xmlHttpRequest = new XMLHttpRequest();
    } else if (typeof ActiveXObject != "undefined") {
        xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
    return xmlHttpRequest;
};

/*
 * 发送请求
 */
Ajax.prototype.sendRequest = function(url, params, HttpMethod) {
    if (!HttpMethod) {
        HttpMethod = "GET";
    }
    
    if (this.xmlreq) {
        this.xmlreq.onreadystatechange = this.selfCallback;
        this.xmlreq.open(HttpMethod,url,true);
        this.xmlreq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
        this.xmlreq.send(params);// 请求是发送成功的,后台有日志打印
    }
    // 这里打印的是[object]
    alert(this.xmlreq);
};

/*
 * 回调函数
 */
Ajax.prototype.selfCallback = function() {
    // 这里打印的是[undefined],然后就报错了。。。。
    alert(this.xmlreq);
    var ready = this.xmlreq.readyState;
    var data = null;
    
    if (ready == 4) {
        data = this.xmlreq.responseXML;
    } else {
        data = "loading... " + ready;
        return;
    }
    this.callback(data);
};

作者: redstarofsleep   发布时间: 2011-02-22



JScript code

this.xmlreq.onreadystatechange = (function(o) {
    return function() {
        o.selfCallback();
    }
})(this);

作者: danica7773   发布时间: 2011-02-22

引用 1 楼 danica7773 的回复:
JScript code

this.xmlreq.onreadystatechange = (function(o) {
return function() {
o.selfCallback();
}
})(this);
能解释下这样改是什么意思吗?为什么要这样改,原来那样错哪了?

作者: redstarofsleep   发布时间: 2011-02-22