2011-04-27 58 views
7

我有以下功能:如何使用回调编写jQuery函数?

function loadProjects(pID) { 

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

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

问题是我希望能够在成功后定义一个callBack函数,并且我希望在loadProjects(1,callback:{包括这里包含的js在成功之后被回调回来)时包含它。)

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

谢谢

+0

大家都谢谢。但我希望回调是我想要的任何东西。我不希望回调是静态的? – AnApprentice 2011-04-27 00:16:28

+0

查看我的回答...? – mattsven 2011-04-27 00:17:23

+0

再次感谢,但所有这些都是静态回调,它不允许我定义像callbackfunc(22) – AnApprentice 2011-04-27 00:23:06

回答

20
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. 
}); 
+4

+1正确猜测他想将参数传递给回调 – mVChr 2011-04-27 00:26:24

+1

@mVChr我读到时笑了起来。 – jessegavin 2011-04-27 00:31:03

+0

这个问题值得一个-1为差的措辞。 – mattsven 2011-04-27 00:33:09

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"); 
}); 
1
function loadProjects(pID, callback) { 

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

} 

调用是这样的:

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

但我怎样才能传递参数回调? – AnApprentice 2011-04-27 00:19:28

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

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

function loadProjects(pId, callback) { 

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

} 

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