JS同步告警功能
JS Syncronous alert function
找了这么久,是时候求助了...
我想做的只是在另一个函数执行完毕后显示一个 alert()
。我指的部分是 ajax
调用的 success
。
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()
是两个函数,仅 add/remove 类 来自 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();
}
他们只是 show/hide 一个覆盖层,里面有一个微调器。
在 ajax
调用的 success
方法中,我想首先 stopWait()
又名隐藏叠加层,然后提醒一些信息。
我尝试了回调、承诺、jQuery 延迟,我不记得还有什么,我就是无法完成这项工作,总是,首先显示 alert()
然后只有在我关闭 alert(data)
stopWait()
完成了它的工作。为什么?
你能帮我理解我做错了什么吗?
谢谢!
编辑 1: 将 alert() 包装在一个函数中并不能解决问题。现在 stopWait() 被执行,但没有显示警报。请检查codepen: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
找了这么久,是时候求助了...
我想做的只是在另一个函数执行完毕后显示一个 alert()
。我指的部分是 ajax
调用的 success
。
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()
是两个函数,仅 add/remove 类 来自 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();
}
他们只是 show/hide 一个覆盖层,里面有一个微调器。
在 ajax
调用的 success
方法中,我想首先 stopWait()
又名隐藏叠加层,然后提醒一些信息。
我尝试了回调、承诺、jQuery 延迟,我不记得还有什么,我就是无法完成这项工作,总是,首先显示 alert()
然后只有在我关闭 alert(data)
stopWait()
完成了它的工作。为什么?
你能帮我理解我做错了什么吗? 谢谢!
编辑 1: 将 alert() 包装在一个函数中并不能解决问题。现在 stopWait() 被执行,但没有显示警报。请检查codepen: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