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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-23 18:54:54  来源:igfitidea点击:

How to write a jQuery function with a callback?

javascriptjqueryjquery-plugins

提问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 */);