2017-03-22 42 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'凍結了所有網頁,並且不允許任何移動或任何按鈕被點擊,等待服務器響應。其實這個按鈕正在旋轉,但我們無法看到他這麼做。

再次感謝您:)