[英]Javascript callback functions with ajax
我正在编写一个通用函数,该脚本将在脚本的多个位置重用。
该函数使用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的答案是正确的。 但是,如果您想始终保持调用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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.