2012-03-23 134 views
0

我有一个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

你尝试'onFinish(事项标识)'? – pimvdb 2012-03-23 11:34:08

+0

我只是试了一下,它似乎工作:) 我在哪里调用我使用的函数(function(){// stuff});在参数区域 – 2012-03-23 11:37:50

+0

内部,您可能需要考虑使用JavaScript库(例如jQuery:http://api.jquery.com/jQuery.ajax/)来帮助您处理Ajax调用 – jlb 2012-03-23 11:41:36

回答

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) 
}); 
+0

是的我已经使用这个想法来编码我的出路这个问题它的工作原理是如何让它工作,我明白这不是一个如此复杂的问题,但它对我来说,因为我刚开始工作在jQuery和JavaScript一般只有1个月:)非常感谢你,丹尼尔。 – 2012-03-23 12:10:41

相关问题