我可以使用函数作为参数吗?

时间:2012-03-23 11:32:31

标签: javascript jquery ajax function parameters

我在javascript文件中有一个AJAX函数,我希望它是抽象的,不要使用任何全局变量。

AJAX将事件插入数据库:

function insertCalendarEvents(calendar_group, event_name, event_datestart, event_datestop, event_timestart, event_timestop, event_info, onFinish) {
    var request;
    if(window.XMLHttpRequest)
        request = new XMLHttpRequest();
    else
        request = new ActiveXObject("Microsoft.XMLHTTP");

    request.onreadystatechange = function() {
        if (request.readyState == 4 && request.status == 200) {
            if(request.responseText.substr(0, 6) == "error ")
                alert(errorName[request.responseText.substr(6)]);
            else {
                var event_id = request.responseText;
                //call onFinish function with parameter event_id which database assigned it
            }
        }
    }

    request.open("GET", "php/calendar.php?action=insertCalendarEvents&calendar_group=" + calendar_group + "&event_name=" + event_name + "&event_datestart=" + event_datestart + "&event_datestop=" + event_datestop + "&event_timestart=" + event_timestart + "&event_timestop=" + event_timestop + "&event_info=" + event_info, true);
    request.send();
}

该函数是异步的,所以我想要做的是,在完成将数据插入数据库的那一刻,我希望它执行一个函数,我将它作为参数提供。

如果有更好的想法如何实现这一点,我会很高兴听到它:)

先谢谢你,丹尼尔!

1 个答案:

答案 0 :(得分:2)

函数只是您可以传递的对象。唯一额外的事情是你可以使用()来调用它们(当然还有参数)。

你可以把它们传递得很好;范围内的所有信息都将被保留。所以,这应该有效:

onFinish(event_id);

基本上,一个更简单的例子就是:

function func() {
  alert("func is being run");
}


func();  // works


function callFunction(f) {
  f();
}

callFunction(func);  // pass func; works


callFunction(function() {             // pass a function on the fly; works
  alert("function passed directly");  // (nothing special in fact)
});