Javascript 未捕获(承诺中)使用SweetAlert2取消
在使用承诺时,如何正确地退出取消按钮而不抛出错误?我的代码抛出一个带有必需复选框的警报确认。代码按其对用户应执行的方式执行,但在控制台窗口中抛出错误: (未兑现的)取消Javascript 未捕获(承诺中)使用SweetAlert2取消,javascript,jquery,ajax,sweetalert,sweetalert2,Javascript,Jquery,Ajax,Sweetalert,Sweetalert2,在使用承诺时,如何正确地退出取消按钮而不抛出错误?我的代码抛出一个带有必需复选框的警报确认。代码按其对用户应执行的方式执行,但在控制台窗口中抛出错误: (未兑现的)取消 //验证逻辑全部通过…现在继续。。。 其他的 { //确定并分析折扣 var myLookup=document.getElementsByName(“myLookup”)[0]。值; $.post(“findthem.php”,{myLookup:myLookup}) .done(函数(json_数据){ var theRes
//验证逻辑全部通过…现在继续。。。
其他的
{
//确定并分析折扣
var myLookup=document.getElementsByName(“myLookup”)[0]。值;
$.post(“findthem.php”,{myLookup:myLookup})
.done(函数(json_数据){
var theResponse1=$.parseJSON(json_数据);
myDiscountRate=响应1['ourDiscountFound'];
}).then(函数(回调){
价格率=价格率*(1-(.01*我的贴现率));
新利率=固定价格(2);
}
游泳({
标题:“确认”,
输入:“复选框”,
输入值:0,
键入:“警告”,
输入占位符:“我同意您的新费率为:”+新费率,
showCancelButton:true,
confirmButtonText:“确认”,
请确认:正确,
预确认:功能(结果){
返回新承诺(功能(解决、拒绝){
如果(结果){
$.post(“my.php”{
数据:数据
})
.完成(
函数(json_数据){
var data_数组=$.parseJSON(json_数据);
var moreDetails='';
结果变量='错误';
var details=“交易被拒绝”
if(数据_数组[“trxApproved”]==true){
结果=‘成功’;
详细信息=“已确认”
moreDetails=“
已批准”+数据数组[“已批准”]+“”+
“
详细信息代码:”+data_数组[“detailsCode”]+”;
}
游泳({
类型:结果,
标题:细节,
html:“详细信息:”+data_数组[“messagetext”]+moreDetails
});
}
);
解决();
}否则{
拒绝(“您必须同意我们的条款和条件”);
}
});
},
allowOutsideClick:false
}).then(函数(json_数据){
})
});
新承诺(函数(解析、拒绝){
不是必需的。$.post()
返回jQuery承诺对象
可能的解决方案将Promise.reject()
替换为newpromise()
构造函数;删除了。然后()
作为第一个swal()的选项
call;模式似乎期望从预确认
返回承诺
,但不确定从.done()
返回的值,而不是json\u数据
swal({
title: "Confirm",
input: 'checkbox',
inputValue: 0,
type: "warning",
inputPlaceholder: 'I agree to <a href="#blahblahMore"></a>',
showCancelButton: true,
confirmButtonText: 'Confirm',
showLoaderOnConfirm: true,
preConfirm: function(result) {
if (result) {
return $.post("my.php", {
Data: data
})
.done(
function(json_data) {
var data_array = $.parseJSON(json_data);
var moreDetails = '';
var resulting = 'error';
var details = "Transaction Declined"
if (data_array["trxApproved"] == true) {
resulting = 'success';
details = "Confirmed"
moreDetails = "<br>Approved<b>" + data_array["approved"] + "</b>" +
"<br>Details Code: <b>" + data_array["detailsCode"] + "</b>";
}
swal({
type: resulting,
title: details,
html: "<h1>Details: </h1>" + data_array["messagetext"] + moreDetails
});
}
);
} else {
return Promise.reject('You must agree to our Terms & Conditions ');
}
},
allowOutsideClick: false
});
swal({
标题:“确认”,
输入:“复选框”,
输入值:0,
键入:“警告”,
输入占位符:“我同意”,
showCancelButton:true,
confirmButtonText:“确认”,
请确认:正确,
预确认:功能(结果){
如果(结果){
返回$.post(“my.php”{
数据:数据
})
.完成(
函数(json_数据){
var data_数组=$.parseJSON(json_数据);
var moreDetails='';
结果变量='错误';
var details=“交易被拒绝”
if(数据_数组[“trxApproved”]==true){
结果=‘成功’;
详细信息=“已确认”
moreDetails=“
已批准”+数据数组[“已批准”]+“”+
“
详细信息代码:”+data_数组[“detailsCode”]+”;
}
游泳({
类型:结果,
标题:细节,
html:“详细信息:”+data_数组[“messagetext”]+moreDetails
});
}
);
}否则{
退货承诺。拒绝(“您必须同意我们的条款和条件”);
}
},
allowOutsideClick:false
});
SweetAlert2在按下“取消”按钮时拒绝结果承诺。您可以:
如果您不需要对json_数据执行任何操作,您也可以使用。更新(2017年1月):此问题已在v7中修复:
您需要向承诺中添加拒绝处理程序。或者,您可以使用
.catch(swal.noop)
作为简单抑制错误的快速方法:
swal('...')
.catch(swal.noop);
另外,您使用的软件包名为SweetAlert2,而不是SweetAlert。在以后的问题中,请提及该软件包,以便获得更多相关答案。您需要了解取消操作
swal({
title: 'Are you sure?',
text: "You won't be able to revert this!",
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, delete it!'
}).then(function(json_data) {
//delete item
}, function(dismiss) {
if (dismiss === 'cancel' || dismiss === 'close') {
// ignore
}
})
在末尾添加catch(swal.noop);swal函数将解决此问题
例如:
swal({
}).then(function() {
}).catch(swal.noop);
提示:避免缩进。你能正确缩进你的代码吗?我看不出所有这些函数都在哪里结束。谢谢@guest271314的缩进。看起来好像有一个结尾
}
太多了。你能发布你的完整代码吗?@Bergi我试图添加更多代码,但不知道如何在不过度复杂的情况下做到这一点,我需要承诺在将表单数据推送到之前处理我的复选框逻辑processing@Bergi是的,我在用,我似乎在文件中找不到如何在使用promisesHow的确认书上覆盖“取消”这是否解决了未经批准的拒绝问题?你的最后一句话可能应该是评论,而不是回答。@Bergi“这如何解决未经批准的拒绝问题?”首先,建议删除不必要的Promise
构造函数。“您的最后一句话可能应该是评论,而不是答案。”不确定错误是否是由于未捕获的未定义结果?将花费一分钟来整理重新排列的$.post()
,.done()
,.then()
,并检查其他可能的错误。关于“//返回?
”:不,您不能从完成的回调中返回。如果它是一个回调,那么它可能是有意义的。你要求一个“否决票说明”,所以我解释了。答案应该是独立的,它们不是一种沟通媒介(如评论)。Th
swal({
title: 'Are you sure?',
text: "You won't be able to revert this!",
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Yes, delete it!'
}).then(function(json_data) {
//delete item
}, function(dismiss) {
if (dismiss === 'cancel' || dismiss === 'close') {
// ignore
}
})
swal({
}).then(function() {
}).catch(swal.noop);