#javascript #jquery
#javascript #jquery
Вопрос:
У меня есть следующая функция:
function loadProjects(pID) {
$.ajax({
url: myURL,
success: function (dataJS) {###Run any supplied call back here####}
});
}
Я вызываю эту функцию следующим образом loadProjects(1);
Проблема в том, что я хочу иметь возможность определять функцию обратного вызова после успешного выполнения, и я хотел бы включить ее при выполнении loadProjects (1, pong (12)). Я хочу иметь возможность предоставлять параметры для обратного вызова.
Как я могу заставить функцию принимать обратный вызов? Как я могу передать обратный вызов этой функции?
Что-то вроде
function loadProjects(pID, callback) {
$.ajax({
url: myURL,
success: function (dataJS) {###Run any supplied call back here####}
});
}
Где я мог бы затем вызвать:
loadProjects(22, pong(12))
Проблема в том, что когда я пытаюсь это сделать, pong (12) запускается немедленно, а не позже при вызове в функции loadProjects?
Идеи? Спасибо
Ответ №1:
попробуйте это:
function loadProjects(pID, callback) {
$.ajax({
url: myURL,
success: function (dataJS) {
if ($.isFunction(callback))
callback();
}
});
}
loadProjects(1, function() { pong(12); });
или:
function loadProjects(pID, callback, value) {
$.ajax({
url: myURL,
success: function (dataJS) {
if ($.isFunction(callback)) {
if (value) {
callback(value);
}else{
callback();
}
}
}
});
}
loadProjects(1, pong, 12);
Комментарии:
1. Это потрясающе. Спасибо. Я соглашусь один раз, ТАК что позвольте мне. еще 5 минут, гррр
2. 1 для
$.isFunction
, что красивее, чемtypeof foo == 'function'
3. @karim79 Который также завершается сбоем в WebKit…
typeof /regex/ === 'function'
😛 (если не используется jQuery, я используюcallback instanceof Function
).4. @ColdTree посмотрите на эту ссылку, если вам нужно сделать что-то более сложное: developer.mozilla.org/en/JavaScript/Reference/Global_Objects /…
5. @alex — 1 что касается webkit, я не знал об этом.
Ответ №2:
loadProjects(22, function(){pong(12);});
Ответ №3:
Попробуйте что-то вроде этого:
var loadProjects = (function(pID, callback) {
var params = { "property" : "value" }
$.ajax({
url: myURL,
success: function (dataJS) { callback(params); }
});
})
loadProjects(22, function(p){ console.log(p); });
Ответ №4:
function loadProjects(pID, callback) {
var callbackArgs = arguments;
callbackArgs.shift();
callbackArgs.shift();
$.ajax({
url: myURL,
success: function (dataJS) {
// Null or this can be used depending on desired behavaiour
// See https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply
callback.apply(null, callbackArgs);
}
});
}
Пример использования:
loadProjects(22, pong, 12);
loadProjects(22, pong, 12, 'foo', 'bar');
12, foo и bar передаются в обратный вызов pong.