具有功能返回请求数据+执行功能

时间:2013-07-20 21:22:01

标签: javascript

我有一个函数获取一个html文件并在页面上显示它,但我想告诉它在页面处理后也执行一个函数。除了我不知道如何用它传递数据。

这就是我现在所拥有的:

call_file('index.html', function(){ 
                        template_handler(
                            function(){ init_menu(); }
                        )}
    );
}

这是这样处理的:

function call_file(url,func){
    caller(url,function(){
        if ( xmlhttp.readyState== 4 && xmlhttp.status== 200 ){
            call_back_fileLoad(xmlhttp.responseText,func);
        }
    });
}
function call_back_fileLoad(result,func){

        if(typeof(func) !== 'undefined'){       
            func(result);
        } else {
            return false;
        }
}

function caller(url,cfunc){
        if (window.XMLHttpRequest)
          {
            xmlhttp=new XMLHttpRequest();
          }
        else
          {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
            xmlhttp.onreadystatechange=cfunc;
            xmlhttp.open("GET",url,true);
            xmlhttp.send();
}

问题是我不知道如何收到html&我想要同时执行的函数,因为它只返回一个数据到函数。

这就是我希望最终的功能如何行动:

function template_handler(data, func){
    var d = document.getElementById('content');
        d.innerHTML = '';
    var div = document.createElement(div);
        div.innerHTML = data;

    d.appendChild(div);

    func(); 
}

目前我不知道如何为call_file正确传递数据,请帮助^ _ ^

2 个答案:

答案 0 :(得分:1)

如我在上面的评论中所述:

“只需为您传递给call_file()的回调函数定义一个参数,然后将该参数作为第一个参数传递给template_handler()。就像这样:

// `call_back_fileLoad()` passes the response, so receive it here
// --------------------------------v
call_file('index.html', function(data) {
    // Then pass it on to the `template_handler()` invocation
    // ----------------v
    template_handler(data, function() { 
        init_menu(); 
    });
});

顺便说一下,你可以摆脱最里面的匿名函数,然后传递init_menu,因为它看起来好像不需要参数。

call_file('index.html', function(data){ 
    template_handler(data, init_menu);
});

答案 1 :(得分:0)

怎么样

修改

xmlhttp.onreadystatechange = (function(xmlhttp, url, somevar1, somevar2){
    return function() {
        cfunc.call(this, xmlhttp, url, somevar1, somevar2);
    }
})(xmlhttp, url, somevar1, somevar2);