javascript - 怎样做ajax返回数据时的解耦?
迷茫
迷茫 2017-04-10 12:45:15
0
1
696
var ajaxProcess = function(xxx, yyy, zzz){
this.strResultDatas = "";

this.submit = function(){
    createXMLHttpRequest();         
    this.url = url;
    xmlHttp.onreadystatechange=this.searchResult; 
    xmlHttp.open("POST",url ,true); 
    xmlHttp.setRequestHeader("If-Modified-Since","0");               
    xmlHttp.send(null);
};

this.searchResult = function(){
    if(xmlHttp.readyState==4 && xmlHttp.status==200){
        this.strResultDatas = xmlHttp.responseText;
        // 此处可对返回的数据进行更进一步的处理。
        //TODO

        // 为了保持类的纯净性,我想将处理过程抛到其它的函数中处理。
        // 
        // 但此处是ajax异步获取的结果集,外部调用时调用的是submit(),
        // 在searchResult()获得返回值时,
        // 怎么才能通知外部函数 searchResult()已经有了返回值呢?
    }

}

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

reply all(1)
大家讲道理

实现一个事件分派机制。

实现一个EventDispatcher类,在你的ajaxProcess类里面dispatchEvent()。

然后在外部注册对相应事件的响应addEventListener()。

雏形如下:

function EventDispatcher() {
    this.listeners = {};
}

EventDispatcher.prototype = {
    addEventListener: function (type, listener) {
        this.listeners[type].push(listener);
    },
    dispatchEvent: function (e) {
        var listeners = this.listeners[e.type];
        for (var i = 0, len = listeners.length; i < len; i++) {
            listeners[i].apply(this, arguments);
        }
    }
}
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template