我在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();
}
该函数是异步的,所以我想要做的是,在完成将数据插入数据库的那一刻,我希望它执行一个函数,我将它作为参数提供。
如果有更好的想法如何实现这一点,我会很高兴听到它:)
先谢谢你,丹尼尔!
答案 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)
});