我一直在寻找这么长时间,寻求帮助...
我想要做的只是在另一个函数完成执行后显示alert()
。我要指的部分是success
调用的ajax
。
jQuery(document).on('click','a.remove_from_cart',function(event){
event.preventDefault();
startWait();
var self = jQuery(this);
jQuery.ajax({
url:ajaxurl,
type:'post',
cache:false,
data:{
action: self.data('action'),
post_id: self.data('id'),
nonce: self.data('nonce')
},
success:function(data){
if (data) {
// some action
}
// please help me here
stopWait().then(alert(data));
}
});
});
startWait()
和stopWait()
是仅从2个html元素添加/删除类的两个函数:function startWait() {
document.getElementById('wait').classList.add('active');
document.body.classList.add('wait');
}
function stopWait() {
var d = jQuery.Deferred();
document.getElementById('wait').classList.remove('active');
document.body.classList.remove('wait');
return d.promise();
}
他们只是显示/隐藏内部带有微调器的叠加层。
在
success
调用的ajax
方法中,我想先stopWait()
再次隐藏叠加层,然后提示一些信息。我尝试了回调,promise,jQuery延迟,但我不记得还有什么,只是无法完成这项工作,总是先显示
alert()
,然后才关闭alert(data)
,然后再显示stopWait()
。为什么?请您能帮我了解我在做什么错吗?
谢谢!
编辑1:将alert()包装在函数中不能解决问题。现在,将执行stopWait(),但不会显示任何警报。请检查代码笔:https://codepen.io/usainicola/pen/GxOzqz
编辑2:问题已解决,这里工作代码笔:https://codepen.io/usainicola/pen/MVORyd
最佳答案
您必须在兑现承诺之前先解决承诺
function stopWait() {
var d = $.Deferred();
document.getElementById("wait").classList.remove("active");
d.resolve();
return d.promise();
}
请看一下更改的codepen
edited code pen