在呼叫一個jquery的ajax方法時,我們有時會需要該方法傳回一個值或給某個全域變數賦值,可是我們發現程式執行完後並沒有取得到我們想要的值,例如:
var i=0;//定义一个全局全量 $.get(url,function(data){ i=9; })//然后调用jquery的一个函数 alert(i);//得到的是0而不是9
data中的資料是非同步取得的,在全域環境下的程式碼是在頁面載入時就執行了,這時非同步取得資料還沒完成,取不到值。
解決方法:
var i=0; $.ajax({ url:url, success:function(){ i=9; }, async:false }); alert(i);
或直接在$.get()前面添加
$.ajaxSettings.async = false;
修改預設配置。
async預設的設定值為true,這種情況為非同步方式,就是說當ajax發送請求後,在等待server端回傳的這個過程中,前台會繼續執行ajax區塊後面的腳本,直到server端回傳正確的結果才會去執行success,也就是說這時候執行的是兩個線程,ajax塊發出請求後一個線程和ajax塊後面的腳本。
當然,如果設定為async:false就失去ajax異步的優點了,具體還需要視情況區別對待處理。
HTTPS://blog.CSDN.net/JA tion_/article/details/49357307
HTTPS://嗚嗚嗚.cn blog上.com/發-照片/怕/4424633.HTML
HTTPS://嗚嗚嗚.基本51.net/article/45432.htm