使用ajax的Javascript回调函数

我正在编写一个通用函数,它将在我的脚本中的多个位置重用。

该函数使用ajax(使用jQuery库),所以我想以某种方式将一个函数(或代码行)传入此函数,以便在ajax完成时执行。 我认为这需要一个回调函数,但在阅读了几个回调的答案后,我仍然对我将如何实现我的情况感到困惑。

我目前的职能是:

function getNewENumber(parentENumber){ $.ajax({ type: "POST", url: "get_new_e_number.php", data: {project_number: projectNumber, parent_number: parentENumber}, success: function(returnValue){ console.log(returnValue); return returnValue; //with return value excecute code }, error: function(request,error) { alert('An error occurred attempting to get new e-number'); // console.log(request, error); } }); } 

使用此函数,我希望能够以与其他jQuery函数相同的方式执行某些操作,即;

 var parentENumber = E1-3; getNewENumber(parentENumber, function(){ alert(//the number that is returned by getNewENumber); }); 

只需给getNewENumber函数另一个参数,然后使用它作为回调。

  // receive a function -----------------v function getNewENumber( parentENumber, cb_func ){ $.ajax({ type: "POST", url: "get_new_e_number.php", data: {project_number: projectNumber, parent_number: parentENumber}, // ------v-------use it as the callback function success: cb_func, error: function(request,error) { alert('An error occurred attempting to get new e-number'); // console.log(request, error); } }); } var parentENumber = E1-3; getNewENumber(parentENumber, function( returnValue ){ alert( returnValue ); }); 

@patrick dw的anwser是对的。 但是如果你想继续调用console.log (或任何其他动作),无论调用者代码函数做什么,那么你可以在你已经拥有的成功函数中添加回调(你的新参数):

 function getNewENumber(parentENumber, cb_func /* <--new param is here*/){ $.ajax({ type: "POST", url: "get_new_e_number.php", data: {project_number: projectNumber, parent_number: parentENumber}, success: function(returnValue){ console.log(returnValue); cb_func(returnValue); // cb_func is called when returnValue is ready. }, error: function(request,error) { alert('An error occurred attempting to get new e-number'); // console.log(request, error); } }); } 

并且调用代码与您的相同,除了函数将通过参数接收returnValue:

 var parentENumber = E1-3; getNewENumber(parentENumber, function(val /* <--new param is here*/){ alert(val); }); 

使用jQuery的Deferred Objects可以做得更好。 让您的AJAX调用返回 jqXHR对象。

 function getNewENumber(parentENumber) { return $.ajax( { ... } ); } getNewENumber(E1 - 3).then(success_callback, error_callback); 

如果你想该函数中保留错误回调,你可以在那里注册:

 function getNewENumber(parentENumber) { var jqXHR = $.ajax( { ... } ); jqXHR.fail( ... ); return jqXHR; } getNewENumber(E1 - 3).done(success_callback);