區(qū)別:1、同步中一個線程要等待上一個線程執(zhí)行完才能開始執(zhí)行,而異步中一個線程在執(zhí)行中,下一個線程不必等待它執(zhí)行完就可以開始執(zhí)行;2、同步是單線程操作,而異步是多線程操作;3、異步的效率要高于同步。
本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。
ajax異步請求:
異步請求就當(dāng)發(fā)出請求的同時,瀏覽器可以繼續(xù)做任何事,Ajax發(fā)送請求并不會影響頁面的加載與用戶的操作,相當(dāng)于是在兩條線上,各走各的,互不影響。一般默認(rèn)值為true。異步請求可以完全不影響用戶的體驗效果,無論請求的時間長或者短,用戶都在專心的操作頁面的其他內(nèi)容,并不會有等待的感覺。
比如:
$.ajax({ type:"POST", url:"Venue.aspx?act=init", dataType:"html", success:function(result){ //function1() f1(); f2(); } failure:function (result) { alert('Failed'); }, } function2();
說明:上述代碼中,當(dāng)ajax塊發(fā)出請求后,他將停留function1(),等待server端的返回,但同時(在這個等待過程中),前臺會去執(zhí)行function2()。
ajax同步請求:
同步請求即是當(dāng)前發(fā)出請求后,瀏覽器什么都不能做,必須得等到請求完成返回數(shù)據(jù)之后,才會執(zhí)行后續(xù)的代碼,相當(dāng)于是排隊,也就是說,當(dāng)JS代碼加載到當(dāng)前ajax的時候會把頁面里所有的代碼停止加載,頁面處于一個假死狀態(tài),當(dāng)這個ajax執(zhí)行完畢后才會繼續(xù)運(yùn)行其他代碼頁面解除假死狀態(tài)(即當(dāng)ajax返回數(shù)據(jù)后,才執(zhí)行后面的function)。
比如:
$.ajax({ type:"POST", url:"Venue.aspx?act=init", dataType:"html", async: false, success:function(result){ //function1() f1(); f2(); } failure:function (result) { alert('Failed'); }, } function2();
說明:上述代碼中,當(dāng)把a(bǔ)syn設(shè)為false時,這時ajax的請求時同步的,也就是說,這個時候ajax塊發(fā)出請求后,他會等待在function1()這個地方,不會去執(zhí)行function2(),直到function1()部分執(zhí)行完畢。
看完了對于ajax同步與異步請求的意思后,我們就來看看ajax同步請求與異步請求的區(qū)別。
ajax同步請求與異步請求的區(qū)別:
同步是指一個線程要等待上一個線程執(zhí)行完才能開始執(zhí)行,同步可以看做是一個單線程操作,只要客戶端請求了,在服務(wù)器沒有反饋信息之前是一個線程阻塞狀態(tài)。
異步是一個線程在執(zhí)行中,下一個線程不必等待它執(zhí)行完就可以開始執(zhí)行。異步肯定是個多線程。在客戶端請求時,可以執(zhí)行其他線程,并且在把這個線程存放在他的隊列里面,有序的執(zhí)行。
異步的效率要高于同步。如果數(shù)據(jù)在線程間共享,那么必須使用同步!
異步模式下:
當(dāng)我們使用AJAX發(fā)送完請求后,可能還有代碼需要執(zhí)行。這個時候可能由于種種原因?qū)е路?wù)器還沒有響應(yīng)我們的請求,但是因為我們采用了異步執(zhí)行方式,所有包含AJAX請求代碼的函數(shù)中的剩余代碼將繼續(xù)執(zhí)行。如果我們是將請求結(jié)果交由另外一個JS函數(shù)去處理的,那么,這個時候就好比兩條線程同時執(zhí)行一樣。
同步模式下:
當(dāng)我們使用AJAX發(fā)送完請求后,后續(xù)還有代碼需要執(zhí)行,我們同樣將服務(wù)器響應(yīng)交由另一個JS函數(shù)去處理,但是這時的代碼執(zhí)行情況是:在服務(wù)器沒有響應(yīng)或者處理響應(yīng)結(jié)果的JS函數(shù)還沒有處理完成return時,包含請求代碼的函數(shù)的剩余代碼是不能夠執(zhí)行的。就好比單線程一樣,請求發(fā)出后就進(jìn)入阻塞狀態(tài),知道接觸阻塞余下的代碼才會繼續(xù)執(zhí)行。
【相關(guān)教程推薦:AJAX視頻教程】