在呼叫一個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

發表評論