問題描述
我已經在谷歌搜索這個,並在我的錯誤修復列表中避免這個錯誤現在很多時間,但我終於到達了列表的最後,我最後要使一個函數返回 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。