AJAX内部回调成功

Callback inside AJAX success

本文关键字:成功 回调 内部 AJAX      更新时间:2023-09-26

我试图在AJAX成功执行中添加一个可选的回调,但我似乎无法在需要的时候运行回调。

这是我的AJAX代码的一个例子

function someAjaxFunction(hosturl, callback){
    $.ajax({
        type: "GET",
        url: hosturl,
        data: {'something': 'code' },
        dataType: 'json',
        success: function(html){                       
            var arr = $.map(html, function(val) { return val; });
            if(arr[0] != 'false'){
                console.log('1');
                console.log('2');
                if (callback) {
                    console.log('calling the callback')
                    callback();
                }
                console.log('3');
            }else{
               console.log('fail') 
            }   
        }
    });
}

以下是回调和AJAX如何执行的示例

function thisIsACallBack(){
    console.log("i'm a callback");
}
someAjaxFunction("some url", thisIsACallBack);

如果我运行此代码,控制台将输出。

1
2
3
i'm a callback

我甚至可以删除回调if条件,这样我仍然可以得到相同的输出。

这里还有一种更好的方法来处理我的Ajax返回,目前我的响应封装在json对象中。如果数据库找不到对象,我必须在数组中放置"false",并将其转换为json对象,然后将其返回到ajax。

因为您必须将回调作为字符串传递给函数

someAjaxFunction("some url", thisIsACallBack); // <-- Wrong thisIsACallBack will be triggered after someAjaxFunction as some separate function call

像这个

someAjaxFunction("some url", "thisIsACallBack()"); // <- Correct way
// Then call eval( callback ); inside Ajax success
....
success: function(html){  
       ...
       eval( callback );
}

你的问题是,在这个代码someAjaxFunction("some url", thisIsACallBack);的情况下,它触发了someAjaxFunction,然后是thisIsACallBack函数,因为你把someAjaxFunction的名称写为字符串

更新

如果你必须将参数传递给你的回调,你的选择是

someAjaxFunction("some url", function(param1){ 
    thisIsACallBack(param1) 
); } );
...
success: function(html){  
       ...
       callback( yourArray );
}

JavaScript有很多方法可以根据您的需要传递回调