我知道可以通过Promise来实现,但我一直在努力寻找方法。
jQuery('.parentDiv').on('click', '.link', function(e) {
jQuery.when(jQuery('.saveBtn').trigger('click', { 'evtData': 'link' })).then(function {
// rest of the logic that should be performed on click of .link
});
});
单击
.saveBtn
会调用一个名为doAjax
的函数:jQuery('.saveBtn').on('click', function() {
doAjax()
});
function doAjax() {
var ajaxCall = jQuery.ajax(ajaxObject);
ajaxCall.done(function(data, status, xhr) {
//some logic go here
});
return ajaxCall;
}
尽管如此,
.then
处理程序内部的逻辑还是要先执行,即在doAjax
完成之前。我相信我需要更改
jQuery.when(jQuery('.saveBtn').trigger('click',{'evtData':'link'}))
,因为它可能未达到应有的Promise状态,并立即被标记为已解决,从而无需等待就执行回调。我尝试在.saveBtn中返回doAjax,但这也没有任何区别。
请点子。
最佳答案
问题是因为trigger()
不是异步函数,所以then
立即被调用。直接单击doAjax()
而不是伪造DOM事件,直接调用.link
会更有意义。尝试这个:
jQuery(function($) {
$('.parentDiv').on('click', '.link', function(e) {
doAjax().then(function {
// rest of the logic that should be performed on click of .link
});
});
$('.saveBtn').on('click', function() {
doAjax()
});
function doAjax() {
var ajaxCall = $.ajax(ajaxObject);
ajaxCall.done(function(data, status, xhr) {
// some logic go here
});
return ajaxCall;
}
});