ajax非同步提交 有時會出現無bug的資料處理異常-----debug沒有問題,正常執行卻資料處理不正確,極少機會會出現正常的處理結果

做你的貓發表於2019-01-04

ajax  被使用時,常預設的就使用了非同步處理。

當遇到後面的程式碼對同樣的資料進行處理 或 要依賴前面ajax處理的結果時,就會導致資料處理結果不正確,未達到預期值。

且,debug時卻能正常完成功能,得到預期值。再就是多次測試,又有很少的機會會出現正確資料結果。

 

這就是ajax非同步和同步的問題,

debug時 程式一直處於同步的過程中執行程式碼。所以設定的非同步被無效化,看不到資料處理的異樣。

不debug時,就會出現資料處理的順序不對,導致結果不對。

解決方法就是將ajax的屬性async  改為 false  即:同步

 

//jquery的async:false,這個屬性 
//預設是true:非同步,false:同步。

function submit_adjust(){
            $.ajax({
                  type: "post",
                  url: basePath + "/provinceKpi/submitAdjust.do",
                  contentType: "application/json; charset=utf-8",
                  data:JSON.stringify($('#form_dialog').serializeObject()),
                  dataType: 'JSON',
                  async: false,
                  success: function (data) {
                      alert("調整成功,並記錄!");
                  },
                  error: function () {
                      alert('調整資料提交失敗');
                  },
                  complete: function () {

                  }
              });
        }
//調整按鈕的點選事件
function adjustment(){
     BootstrapDialog.show({
         title: 'kpi資料調整',
         size :BootstrapDialog.SIZE_WIDE,
         message: $('<div></div>').load(basePath + '/provinceKpi/dialog/adjust_dialog.do',{limit: 25}, 
        function(data){
         }),
         buttons: [
                   {
                       label: '確認調整',
                       action: function(dialog) {
                           if(confirm("確認調整?")){
                               submit_adjust();
                               dialog.close();
                               $("#grid").bootstrapTable('refresh');
                           }
                       }
                   }
                   ,{
                       label: '關閉',
                       action: function(dialog) {
                           dialog.close();
                       }
                   }]
     });
}

//上面程式碼是我在開發中遇到的   
/*先呼叫submit_adjust()方法,然後 接著又重新整理了列表,這兩個方法處理的是同一個表的資料,如果ajax採用了預設的非同步就會出現資料處理錯誤的現象*/

 

相關文章