專案中有這樣一個需求,使用ajax載入資料返回頁面並賦值,然後前端取出該值
這其中涉及到程式碼的順序問題,有時後台還未回傳數據,但已執行後面程式碼,
所以就會造成無法取值
$.ajax({ type: "post", url: "admin/PfmOptionRuleItem.do", success: function(data){ $("#ruleItem").val(data.ruleItem); //① } }); return $("#ruleItem").val(); //②
如果①還未從背景回傳資料 此時執行②就取得不到值
Ajax的第一個字母是asynchronous的開頭字母,這意味著所有的操作都是並行的,完成的順序沒有前後關係。
$.ajax()的async參數總是設定成true,這標誌著在請求開始後,其他程式碼依然能夠執行。
如果把這個選項設定成false,這表示所有的請求都不再是異步的了,這也會導致瀏覽器被鎖死。
雖然官方不建議這麼乾,只是不能用太多,否則會造成使用者體驗不佳
舉個栗子
alert("setp 1"); $.ajax({ url: "admin/PfmOptionRuleItem.do", async: false, success: function(data){ alert("hello ajax"); //① } }); alert("setp 2"); //②
當把asyn設為false時,這時ajax的請求時同步的,也就是說,這個時候ajax塊發出請求後,
他會等待在①這個地方,不會去向下執行②,直到①執行完畢
此時依序執行順序為
setp 1
hello ajax
setp 2
如果async為true 則執行順序為
setp 1
setp 2
hello ajax
關於本文給大家敘述的jQuery中的ajax async同步和異步,全部介紹完了,希望對大家有所幫助。