我试图在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。
答案 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有多种方法可以根据需要传递回调