如何用回调编写jQuery函数?

时间:2011-04-27 00:11:06

标签: javascript jquery jquery-plugins

我有以下功能:

function loadProjects(pID) {

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

我将此函数称为loadProjects(1);

问题是我希望能够在成功之后定义一个callBack函数,并且我想在我执行loadProjects时包含它(1,回调:{此处包含的js在成功后被回调}}

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

由于

6 个答案:

答案 0 :(得分:22)

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 :(得分: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");
});

答案 2 :(得分:1)

function loadProjects(pID, callback) {

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

}

调用类似的东西:

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

答案 3 :(得分:1)

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

function loadProjects(pId, callback) {

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

}

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

答案 4 :(得分:0)

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();
    }

答案 5 :(得分:0)

试试这个:

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