0

我有一个函数,它获取一个 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,请帮助^_^

4

2 回答 2

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);
});
于 2013-07-20T21:49:26.970 回答
0

怎么样

编辑

xmlhttp.onreadystatechange = (function(xmlhttp, url, somevar1, somevar2){
    return function() {
        cfunc.call(this, xmlhttp, url, somevar1, somevar2);
    }
})(xmlhttp, url, somevar1, somevar2);
于 2013-07-20T21:33:09.677 回答