2012-03-23 218 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

相關問題