我试图在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有很多方法可以根据您的需要传递回调