Javascript 如何编写带有回调的 jQuery 函数?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5797930/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to write a jQuery function with a callback?
提问by AnApprentice
I have the following function:
我有以下功能:
function loadProjects(pID) {
$.ajax({
url: myURL,
success: function (dataJS) {XXXXXXXXXXXXXXXX}
});
}
I call this function like so loadProjects(1);
我像这样调用这个函数 loadProjects(1);
Issue is I want to be able to define a callBack function after success, and I'd like to include it when I do loadProjects(1, callback:{whatever js is included here gets called back after success})
问题是我希望能够在成功后定义一个回调函数,我想在我做 loadProjects(1, callback:{whatever js is包含在成功后被回调})
How can I have a function accept a callback? How can I pass a callback to that function?
如何让函数接受回调?如何将回调传递给该函数?
Thanks
谢谢
回答by N.B.
function loadProjects(pID, callbackFunction)
{
$.ajax({
url: myURL,
success: function (dataJS)
{
if(typeof callbackFunction == 'function')
{
callbackFunction.call(this, dataJS);
}
}
});
}
Usage:
用法:
loadProjects(pID, function(dataJS)
{
// do stuff with your dataJS, bear in mind you can call the parameter any name.
});
回答by jessegavin
Here's how you can modify your function so that it can accept a callback.
以下是如何修改您的函数以便它可以接受回调。
function loadProjects(pID, callback) {
$.ajax({
url: myURL,
success: function (dataJS) {
if ($.isFunction(callback)) {
callback.call();
}
}
});
}
Here's how you would use it.
这是您将如何使用它。
function myCoolCallback() {
alert("I am cool");
}
loadProjects(123, myCoolCallback);
Or you can use it with an anonymous function like so.
或者你可以像这样使用匿名函数。
loadProjects(123, function() {
alert("I am cool");
});
回答by mVChr
function loadProjects(pID, callback) {
$.ajax({
url: myURL,
success: function (dataJS) { if (callback) { callback(); } }
});
}
Invoking something like this:
调用这样的东西:
loadProjects(111, function() { alert('hello!'); });
回答by ninjascript
You can pass a function to another function as if it were any other object. Check this out:
您可以将一个函数传递给另一个函数,就好像它是任何其他对象一样。看一下这个:
function loadProjects(pId, callback) {
$.ajax({
url: myUrl,
success: function() {
callback.call(); // <-- invokes your callback with no args
}
}
You might also read up on the MDC documentation (function.call()).
您还可以阅读MDC 文档 (function.call())。
回答by matt
function loadProjects(pID, callback) {
$.ajax({
url: myURL,
success: function (dataJS) {
// your initial method declaration goes here
...
// just call the callback method at the end of the success method
callback();
}
回答by mattsven
Try this:
尝试这个:
var loadProjects = function(pID, callback) {
var obj = { url: myURL };
if(typeof callback != "function"){
obj.success = function(dataJS){
loadProjects(1, /* Your callback func here */);
};
} else {
obj.success = callback;
}
$.ajax(obj);
};
loadProjects(1, /* Your callback func here */);