這篇文章給大家介紹如何理解ajax中的async屬性值同步和異步及同步和異步區(qū)別,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)建站是一家網站設計公司,集創(chuàng)意、互聯(lián)網應用、軟件技術為一體的創(chuàng)意網站建設服務商,主營產品:響應式網站設計、品牌網站建設、成都全網營銷。我們專注企業(yè)品牌在網站中的整體樹立,網絡互動的體驗,以及在手機等移動端的優(yōu)質呈現。網站設計制作、做網站、移動互聯(lián)產品、網絡運營、VI設計、云產品.運維為核心業(yè)務。為用戶提供一站式解決方案,我們深知市場的競爭激烈,認真對待每位客戶,為客戶提供賞析悅目的作品,網站的價值服務。
jquery中ajax方法有個屬性async用于控制同步和異步,默認是true,即ajax請求默認是異步請求,有時項目中會用到AJAX同步。這個同步的意思是當JS代碼加載到當前AJAX的時候會把頁面里所有的代碼停止加載,頁面出現假死狀態(tài),當這個AJAX執(zhí)行完畢后才會繼續(xù)運行其他代碼頁面假死狀態(tài)解除。而異步則這個AJAX代碼運行中的時候其他代碼一樣可以運行。
ajax中async這個屬性,用于控制請求數據的方式,默認是true,即默認以異步的方式請求數據。
一、async值為true (異步)
當ajax發(fā)送請求后,在等待server端返回的這個過程中,前臺會繼續(xù) 執(zhí)行ajax塊后面的腳本,直到server端返回正確的結果才會去執(zhí)行success,也就是說這時候執(zhí)行的是兩個線程,ajax塊發(fā)出請求后一個線程 和ajax塊后面的腳本(另一個線程)
例如
$.ajax({ type:"POST", url:"Venue.aspx?act=init", dataType:"html", success:function(result){ //function1() f1(); f2(); } failure:function (result) { alert('Failed'); }, } function2();
在上例中,當ajax塊發(fā)出請求后,他將停留function1(),等待server端的返回,但同時(在這個等待過程中),前臺會去執(zhí)行function2()。
二、async值為false (同步)
當執(zhí)行當前AJAX的時候會停止執(zhí)行后面的JS代碼,直到AJAX執(zhí)行完畢后時,才能繼續(xù)執(zhí)行后面的JS代碼。
例如
$.ajax({ type:"POST", url:"Venue.aspx?act=init", dataType:"html", async: false, success:function(result){ //function1() f1(); f2(); } failure:function (result) { alert('Failed'); }, } function2();
當把asyn設為false時,這時ajax的請求時同步的,也就是說,這個時候ajax塊發(fā)出請求后,他會等待在function1()這個地方,不會去執(zhí)行function2(),直到function1()部分執(zhí)行完畢。
Ajax同步與異步的區(qū)別
var returnValue = null; xmlhttp = createXmlHttp(); xmlhttp.onreadystatechange = function() { if(xmlhttp.readyState == 4 && xmlhttp.status == 200) { if (xmlhttp.responseText == "true") { returnValue = "true"; } else { returnValue = "false"; } } }; xmlhttp.open("Post",url,true); //異步傳輸 xmlhttp.setRequestHeader("If-Modified-Since","0"); //不緩存Ajax xmlhttp.send(sendStr); return returnValue;
在異步時才可以用xmlHttpReq.onreadystatechange狀態(tài)值!下面是異步和同步的不同調用方式:
Java
xmlHttpReq.open("GET",url,true);//異步方式 xmlHttpReq.onreadystatechange = showResult; //showResult是回調函數名 xmlHttpReq.send(null); function showResult(){ if(xmlHttpReq.readyState == 4){ if(xmlHttpReq.status == 200){ ****** } } }
Java
xmlHttpReq.open("GET",url,false);//同步方式 xmlHttpReq.send(null); showResult(); //showResult雖然是回調函數名但是具體用法不一樣~ function showResult(){ //if(xmlHttpReq.readyState == 4){ 這里就不用了,直接dosomething吧~ //if(xmlHttpReq.status == 200){ ******//dosomething //} //} } xmlhttp.open("Post",url,true);
如果是同步(false),返回值是true或false,因為執(zhí)行完send后,開始執(zhí)行onreadystatechange,程序會等到onreadystatechange都執(zhí)行完,取得responseText后才會繼續(xù)執(zhí)行下一條語句,所以returnValue一定有值。
如果是異步(true),返回值一定是null,因為程序執(zhí)行完send后不等xmlhttp的響應,而繼續(xù)執(zhí)行下一條語句,所以returnValue還沒有來的及變化就已經返回null了。
所有如果想獲得xmlhttp返回值必須用同步,異步無法得到返回值。
同步異步使用xmlhttp池時都要注意:取得xmlhttp時只能新建xmlhttp,不能從池中取出已用過的xmlhttp,因為被使用過的xmlhttp的readyState為4,所以同步異步都會send但不執(zhí)行onreadystatechange。
關于如何理解ajax中的async屬性值同步和異步及同步和異步區(qū)別就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
文章名稱:如何理解ajax中的async屬性值同步和異步及同步和異步區(qū)別
URL分享:http://m.rwnh.cn/article6/jipcig.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站收錄、企業(yè)建站、企業(yè)網站制作、小程序開發(fā)、動態(tài)網站、ChatGPT
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)