我的家園

          我的家園

          先來看以下代碼:

          var flag=true;
          var index=0;
          $.ajax({
          	url: "http://www.baidu.com/",
          	success: function(data){
          		flag=false;
          	}	
          });
          while(flag){
          	index++;
          }
          alert(index);

          ?請問最后alert的index的結(jié)果是多少?

          可能有人會說0唄。實際上卻沒那么簡單。大家可以自己試試看。可以看到最終程序進入了一個死循環(huán)!怎么會這樣呢!

          我們在看一段代碼:

          var flag=true;
          $.ajax({
          	url: "http://www.baidu.com/",
          	success: function(data){
          		flag=false;
          	}	
          });
          alert(flag);

          ?

          大家看最后alert出flag的值是多少呢?沒錯,是true!為什么呢?明明我們在ajax請求成功了將flag設(shè)為false,怎么還是true呢?

          這實際上是Ajax的異步機制造成的。

          這里解釋一下,同步和異步。js是單線程的,由于執(zhí)行ajax請求會消耗一定的時間,甚至出現(xiàn)了網(wǎng)絡(luò)故障而遲遲得不到返回結(jié)果;這時,如果同步執(zhí)行的話,就必須等到ajax返回結(jié)果以后才能執(zhí)行接下來的代碼,如果ajax請求需要1分鐘,程序就得等1分鐘。如果是異步執(zhí)行的話,就是告訴ajax代碼“老兄,既然你遲遲不返回結(jié)果,我先不等你了,我還有一大堆代碼要執(zhí)行,等你執(zhí)行完了給我說一下”。

          Ajax默認(rèn)是異步請求的,所以就出現(xiàn)了上面我們看到的結(jié)果。也就是ajax里面的代碼還沒有執(zhí)行完,先執(zhí)行了下面的代碼。

          ?

          那么如何使Ajax執(zhí)行同步請求呢?這就需要設(shè)置async。代碼如下:

          var flag=true;
          var index=0;
          $.ajax({
          	url: "http://www.baidu.com/",
          	async:false,
          	success: function(data){
          		flag=false;
          	}	
          });
          while(flag){
          	index++;
          }
          alert(index);

          ?async默認(rèn)是true,也就是異步,我們設(shè)置為false,即為同步。這時我們再看看結(jié)果吧。



          已有 0 人發(fā)表留言,猛擊->>這里<<-參與討論


          ITeye推薦



          Feedback

          # re: javascript Ajax 同步請求與異步請求的問題  回復(fù)  更多評論   

          2012-09-20 21:58 by 1900
          感謝作者,解決了我困惑

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 闽清县| 松原市| 西城区| 揭阳市| 车致| 平塘县| 仁寿县| 蒙城县| 九台市| 库车县| 巨野县| 泾川县| 宁德市| 云南省| 乐东| 黄浦区| 盐池县| 固阳县| 广东省| 宁陕县| 普兰县| 奇台县| 阜平县| 新营市| 藁城市| 沙湾县| 韶关市| 湖北省| 高淳县| 准格尔旗| 夹江县| 泰宁县| 吴桥县| 南平市| 文水县| 朝阳市| 澄城县| 云阳县| 牡丹江市| 达州市| 泽库县|