【问题标题】:How to write a jQuery function with a callback?如何编写带有回调的 jQuery 函数?
【发布时间】:2011-04-27 00:11:05
【问题描述】:

我有以下功能:

function loadProjects(pID) {

    $.ajax({
        url: myURL,
        success: function (dataJS) {XXXXXXXXXXXXXXXX}
    });
}

我像这样调用这个函数 loadProjects(1);

问题是我希望能够在成功后定义一个回调函数,并且我想在加载项目时包含它(1,回调:{这里包含的任何 js 在成功后都被回调})

如何让函数接受回调? 如何将回调传递给该函数?

谢谢

【问题讨论】:

  • 谢谢大家。但我希望回调是我想要的任何东西。我不希望回调是静态的?
  • 再次感谢,但所有这些都是静态回调,它不允许我定义诸如 callbackfunc(22) 之类的东西

标签: javascript jquery jquery-plugins


【解决方案1】:
function loadProjects(pID, callbackFunction)
{
    $.ajax({
        url: myURL,
        success: function (dataJS)
        {
            if(typeof callbackFunction == 'function')
            {
                callbackFunction.call(this, dataJS);
            }
        }
    });
}

用法:

loadProjects(pID, function(dataJS)
{
    // do stuff with your dataJS, bear in mind you can call the parameter any name.
});

【讨论】:

  • +1 用于正确猜测他想将参数传递给回调
  • 这个问题由于措辞不佳而值得-1。
  • 我爸爸总是告诉我,棘手的部分不是找出解决方案,而是找出问题所在。
【解决方案2】:

以下是修改函数以使其接受回调的方法。

function loadProjects(pID, callback) {
    $.ajax({
        url: myURL,
        success: function (dataJS) {
          if ($.isFunction(callback)) {
            callback.call();
          }
        }
    });
}

这就是你将如何使用它。

function myCoolCallback() {
  alert("I am cool");
}  

loadProjects(123, myCoolCallback);

或者您可以将它与这样的匿名函数一起使用。

loadProjects(123, function() {
  alert("I am cool");
});

【讨论】:

    【解决方案3】:
    function loadProjects(pID, callback) {
    
        $.ajax({
            url: myURL,
            success: function (dataJS) { if (callback) { callback(); } }
        });
    
    }
    

    调用类似这样的东西:

    loadProjects(111, function() { alert('hello!'); });
    

    【讨论】:

    • 但是如何将参数传递给回调?
    【解决方案4】:

    您可以将一个函数传递给另一个函数,就像它是任何其他对象一样。看看这个:

    function loadProjects(pId, callback) {
    
      $.ajax({
        url: myUrl,
        success: function() {
          callback.call(); // <-- invokes your callback with no args
        }
    
    }
    

    您还可以阅读the MDC documentation (function.call())

    【讨论】:

      【解决方案5】:
      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();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 2015-07-21
        • 2016-01-31
        • 1970-01-01
        • 2010-11-05
        • 2018-05-08
        相关资源
        最近更新 更多