2012-03-23 2 views
0

나는 자바 스크립트 파일 안에 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 (EVENT_ID)를'시도해 봤어 :

onFinish(event_id); 

을 기본적으로, 더 사소한 예는이 있을까? – pimvdb

+0

엎드려 그냥 그것을 tryed하고 작동하는 것 같습니다 :) 내가 어디 함수()() (//물건)를 사용하는 함수를 호출; 매개 변수 영역 –

+0

안에 Ajax 호출에 도움이되는 JavaScript 라이브러리 (예 : jQuery : http://api.jquery.com/jQuery.ajax/)를 사용하는 것이 좋습니다. – jlb

답변

2

함수는 전달할 수있는 객체입니다. 유일한 추가 사항은 ()을 사용하여 호출 할 수 있다는 것입니다 (물론 인수도 함께 사용 가능).

주위를 잘 전달할 수 있습니다. 범위 지정과 같은 모든 정보가 보존됩니다. 그래서,이 작동합니다 :

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 개월 밖에 안된다. 대단히 감사합니다. –

관련 문제