AJAX内部回调成功

时间:2015-12-13 10:41:06

标签: javascript php jquery json ajax

我试图在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-condition,我仍然会得到相同的输出。

这里也是一个更好的方法来处理我的Ajax返回当前我的响应包装在一个json对象中。如果数据库找不到对象,我必须在数组中放置'false'并将其转换为json对象,然后再回显给ajax。

1 个答案:

答案 0 :(得分:2)

Couse你必须将你的回调作为字符串传递给你的函数

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函数

<强>更新

如果你必须将params传递给你的回调你的选择是

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

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

JavaScript有多种方法可以根据需要传递回调