ajax的同步和非同步問題
阿新 • • 發佈:2019-01-29
經常說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,即同步的。