使用ajax的Javascript回调函数

时间:2011-02-14 02:13:37

标签: javascript jquery ajax callback

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

该函数使用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);
});

3 个答案:

答案 0 :(得分:7)

只需为该函数提供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 );
});

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

使用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);