如何使用可以将Params传递给的回调编写jQuery函数?

时间:2011-04-27 01:26:11

标签: javascript jquery

我有以下功能:

function loadProjects(pID) {

    $.ajax({
        url: myURL,
        success: function (dataJS) {###Run any supplied call back here####}
    });
}

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

问题是我希望能够在成功后定义一个callBack函数,并且我想在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函数中调用时?

想法?感谢

4 个答案:

答案 0 :(得分:7)

试试这个:

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 :(得分:2)

loadProjects(22, function(){pong(12);});

答案 2 :(得分:0)

尝试这样的事情:

var loadProjects = (function(pID, callback) {
    var params = { "property" : "value" }
    $.ajax({
       url: myURL,
       success: function (dataJS) { callback(params); }
    });
})

loadProjects(22, function(p){ console.log(p); });

答案 3 :(得分:0)

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回调。