1. 程式人生 > >淺談ajax非同步和同步載入的區別

淺談ajax非同步和同步載入的區別

說簡單點,ajax預設是非同步載入的,也就是說第一個fun請求資料時,資料還未返回時便開始執行第二個fun了,

如果將其設定為同步請求,則會等第一個function執行完後才會載入第二個function了

非同步請求:

var flag=true;
$.ajax({
  url: "http://www.jb51.net/",
  success: function(data){
    flag=false;
  }  
});
alert(flag);
alert出flag的值是多少呢?沒錯,是true!
var flag=true;
var index=0;
$.ajax({
  url: "http://www.jb51.net/",
  async:false,
  success: function(data){
    flag=false;
  }  
});
while(flag){
  index++;
}
alert(index);


async預設是true,也就是非同步,我們設定為false,即為同步。

js是單執行緒的,由於執行ajax請求會消耗一定的時間,甚至出現了網路故障而遲遲得不到返回結果;這時,如果同步執行的話,就必須等到ajax返回結果以後才能執行接下來的程式碼,如果ajax請求需要1分鐘,程式就得等1分鐘。如果是非同步執行的話,就是告訴ajax程式碼“老兄,既然你遲遲不返回結果,我先不等你了,我還有一大堆程式碼要執行,等你執行完了給我說一下”。

Ajax預設是非同步請求的,所以就出現了上面我們看到的結果。也就是ajax裡面的程式碼還沒有執行完,先執行了下面的程式碼。

參考連結