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);