Могу ли я использовать функцию в качестве параметра? - PullRequest
0 голосов
/ 23 марта 2012

У меня есть функция AJAX внутри файла javascript, и я хочу, чтобы она была абстрактной и не использовала глобальные переменные.

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 Ответ

2 голосов
/ 23 марта 2012

Функции - это просто объекты, которые вы можете передать. Единственная дополнительная вещь - вы можете вызывать их, используя () (конечно, с аргументами).

Вы можете передать их просто отлично; вся информация, такая как область видимости, будет сохранена. Итак, это должно работать:

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)
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...