問題描述

我已經在谷歌搜索這個,並在我的錯誤修復列表中避免這個錯誤現在很多時間,但我終於到達了列表的最後,我最後要使一個函數返回 true /false 來表示是否驗證是否成功。

我正在使用 ajax 將某些字段與已經在 db 中的字段進行比較,默認情況下,$.post()方法是異步操作的。

我在調用 onSuccess 中設置一個變量,調用方法沒有得到響應,所以我的所有 js /jquery 在 pageLoad 上失敗… 我更喜歡如果我仍然可以繼續使用 $.post 方法。

最佳解決方案

jQuery< 1.8

我建議您使用 $.ajax()而不是 $.post(),因為它可以更自定義。

如果您調用 $.post(),例如:

$.post( url, data, success, dataType );

你可以把它變成 $.ajax()的等價物:

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType,
  async:false
});

請注意 $.ajax()參數對象末尾的 async:false

這裏有 $.ajax()參數的詳細信息:jQuery.ajax() – jQuery API Documentation


編輯:jQuery 1.8 “async:false” 棄用通知

對於 jQuery> = 1.8,解決方案有所不同。

現在的想法是,由於現在 jQuery 不會阻止 UI,要麼使用插件 (例如 BlockUI),要麼在調用 $.ajax()之前手動添加一個疊加層,而是從 AJAX .done()回調中刪除它。

請查看 this answer 以獲得可能的實現。

次佳解決方案

如果要同步請求,將 async 屬性設置為 false 作為請求。查看 jQuery AJAX Doc

第三種解決方案

從 Jquery 文檔中:將 async 選項指定為 false 以獲取同步 Ajax 請求。然後,您的回調可以在您的母親功能繼續進行之前設置一些數據。

以下是您的代碼,如果更改如下所示:

beforecreate: function(node,targetNode,type,to) {
    jQuery.ajax({
         url:    url,
         success: function(result) {
                      if(result.isOk == false)
                          alert(result.message);
                  },
         async:   false
    });          
}

這是因為 $ .ajax 是唯一可以設置異步性的請求類型

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇