2017-03-22 41 views
0

首先,我对我未来的英语半级表示歉意。

我来找你,因为我有一个奇怪的问题与我的JavaScript。

在这里你可以看到,我有这样的代码:

addVoucherMaster: function (Code) { 
    var btns = $('.btn-spin'); 
    btns.empty(); 
    if (btns.find('i.fa-spinner').length == 0) { 
     $('<i>', { 'class': 'fa fa-spinner fa-pulse' }).appendTo(btns); 
    } 
    btns.css('opacity', '.5'); 
    $(".validation-summary-errors").attr('class', 'validation-summary-valid'); 
    $(".validation-summary-valid").children('ul').empty(); 

    var dataSend = { 
     voucherId: Code, 
    }; 
    var jsonData = JSON.stringify(dataSend); 

    var result = null; 
    if (Code && this.addVoucherUrl) { 
     $.ajax({ 
      url: this.addVoucherUrl, 
      type: 'POST', 
      data: jsonData, 
      dataType: 'json', 
      processData: false, 
      contentType: 'application/json; charset=utf-8', 
      async: false, 
      success: function (data) { 
       result = data.Data; 
       return data; 
      } 
     }); 
     if (result == 'True') { 
      this.payments(); 
     } else { 
      var btns = $('.btn-spin'); 
      this.errorVoucher("Incorrect voucher"); 
      btns.css('opacity', 1); 
      btns.empty(); 
      btns.append('+'); 
     } 
    } 
}, 

这是非常糟糕的写入,但首先我在使用旋转器(装载机)按钮取代了“+”,然后我做一个ajax查询(异步),然后重新执行一些代码。 (所有这些都由data-bind =“click:addVoucherMaster”执行)

问题从这里开始。 当我使用带有断点的Chrome调试器时,在'btns.css('opacity','.5');'之后,我的按钮就像我想要的那样,然后响应让我等待1/2秒,而我的按钮停止旋转结束。

但是,没有调试器,1/2秒就会出现在我的按钮开始旋转之前。 (所以它在同一时间开始和停止,我们什么都看不到)。

有人能帮助我吗?

谢谢你在前进,

大卫,

+1

现场演示效果更好。或者至少有一些html代码。 – blackmiaool

+0

我没有完全理解它,但为什么你做异步错误? – sofl

回答

0

更改Ajax请求到这一点:

$.ajax({ 
    url: this.addVoucherUrl, 
    type: 'POST', 
    data: jsonData, 
    dataType: 'json', 
    processData: false, 
    contentType: 'application/json; charset=utf-8', 
    async: false, 
    success: function (data) { 
     result = data.Data; 

     if (result == 'True') { 
      this.payments(); 
     } else { 
      var btns = $('.btn-spin'); 
      this.errorVoucher("Incorrect voucher"); 
      btns.css('opacity', 1); 
      btns.empty(); 
      btns.append('+'); 
     } 
    } 
}); 

的,如果你有/ else结构,而Ajax请求还在忙着可能是执行。

+0

嘿,谢谢你的回答,但那还是不行......而且,'async:false'应该是做这个工作的。 –

+0

同样的问题还存在吗?你可以在代码中加入一些'console.log(1)',这样你就可以看到脚本执行的顺序了吗? (增加数字,这样你可以看到差异) –

+0

是的,这是同样的问题。我已经把我的spining指令和$ .ajax的成功后的console.log指令,他们似乎是在良好的秩序中执行... –

0

问题解决了!对不起造成的不便,并感谢您的帮助。我已经用async:true代替async:false,并执行request.done()中的下一个代码...'async:false'冻结了所有网页,并且不允许任何移动或任何按钮被点击,等待服务器响应。其实这个按钮正在旋转,但我们无法看到他这么做。

再次感谢您:)