繁体   English   中英

AJAX内部回调成功

[英]Callback inside AJAX success

我试图在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名称而不是字符串时触发了someAjaxFunction然后是thisIsACallBack函数

更新

如果您必须将参数传递给回调,则可以选择

someAjaxFunction("some url", function(param1){ 
    thisIsACallBack(param1) 
); } );

...
success: function(html){  
       ...
       callback( yourArray );
}

JavaScript有多种方式可以传递回调取决于您的需要

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM