Javascript 有没有更好的方法覆盖JS ajax回调?
我需要在ajax调用完成时执行不同的操作,具体取决于触发了哪个事件Handler 以下是我的想法:Javascript 有没有更好的方法覆盖JS ajax回调?,javascript,jquery,callback,Javascript,Jquery,Callback,我需要在ajax调用完成时执行不同的操作,具体取决于触发了哪个事件Handler 以下是我的想法: // create object to manipulate later save = { save_to_db: function () { $.ajax({ ...snip... success: function (result) { save.callback(); } })
// create object to manipulate later
save = {
save_to_db: function () {
$.ajax({
...snip...
success: function (result) {
save.callback();
}
})
},
callback: function () {
console.log('default callback');
}
};
// normal useage
$('#b_save').click(function (e) {
save.save_to_db()
});
// one off special useage
$('#b_add_to_basket').click(function (e) {
e.preventDefault();
save.old_callback = save.callback();
save.callback = function () {
console.log('overridden call back baby!!')
}
save.save_to_db();
save.callback = save.old_callback();
});
这个问题:传入回调函数时,可能我缺少如何拥有可以覆盖的默认回调
我的问题是,有没有更好的方法来实现这一点,并且可以对其进行优化?最好不要在
$.ajax
调用中传递回调-这对于jQuery 1.5是一个很好的用途
更改save_do_db(),使其返回$.ajax
调用的结果,并删除成功:
字段:
save_to_db: function () {
return $.ajax({
...snip...
}
})
},
callback: ...,
overridden: ...,
然后在调用AJAX调用时注册成功回调:
// normal usage
$('#b_save').click(function (e) {
save.save_to_db().then(save.callback);
});
// one off special usage
$('#b_add_to_basket').click(function (e) {
e.preventDefault();
save.save_to_db().then(save.overridden);
});
请注意,您可能需要做一些额外的工作,以确保
此
在回调函数中包含一个正常值。从风格角度来看,您可以使用function maker函数:
function make_saver_function(success_callback){
return function () {
return $.ajax({
...snip...
success: sucess_callback
});
};
}
这将允许您轻松创建定制的保存功能:
save_to_db = make_saver_function(function(){
console.log('default callback');
});
one_off_save_to_db = make_saver_function(function () {
console.log('overridden call back baby!!')
});
其实没什么不同。您的版本仍然需要包装函数来避免重新键入save_to_db。然后在常见情况下(…),我可以接受这个问题的任一答案。谢谢+1对于延迟的对象,我还没有遇到。