1. 程式人生 > >ajax的同步和非同步問題

ajax的同步和非同步問題

經常說ajax是非同步執行的技術,但是今天才知道非同步和同步的區別。理解很深刻,來源於最近來的一個小專案。

    <script type="text/javascript"> 
    var flag=0;
    var i=0;
    var title;
	$.ajax({
   		url: "showNewsAction.action",
   		type:'jsonp',
   		async: false,
   		success: function(msg){
			for(i=0;i<msg.toString().length;i++){
	     		$("#shopping_list").append("<li><a href="+"http://localhost:8080/HCF/showNews.jsp?id="
	     			+msg.news[i].id
	     			+">"
	     			+i
	     			+msg.news[i].id
	     			+msg.news[i].title
	     			+msg.news[i].author
	     			+msg.news[i].date.toString()
	     			+"</a></li>");
	     	}	
		}
	});

</script>
<script type="text/javascript">
	$("#shopping_list li").quickpaginate({ perpage:5, pager : $("#shopping_list_counter") });
</script>


async預設的設定值為true,這種情況為非同步方式,當ajax傳送請求後,在等待server端返回的資料的過程中,程式會繼續執行ajax塊後面的程式碼,直到伺服器返回正確的結果才會去執行success的方法,也就是說程式會從兩個方向去執行指令碼。在這個程式裡,執行是這樣的,執行ajax的success方法,另一方面執行指令碼2。顯然,不能得到想要的結果。因為,執行順序的問題。

當把asyn設為false時,這時ajax的請求時同步的。這樣的話,只有ajax請求成功之後,才會執行指令碼2。也就是說,這個時候,ajax的success方法沒有執行的情況下,指令碼2是不執行的,因為這個時候是async: false,即同步的。