這篇文章主要講解了“ajax同步和異步的區(qū)別有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“ajax同步和異步的區(qū)別有哪些”吧!
十年的歷城網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整歷城建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“歷城網(wǎng)站設(shè)計(jì)”,“歷城網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
區(qū)別:1、同步中一個(gè)線程要等待上一個(gè)線程執(zhí)行完才能開始執(zhí)行,而異步中一個(gè)線程在執(zhí)行中,下一個(gè)線程不必等待它執(zhí)行完就可以開始執(zhí)行;2、同步是單線程操作,而異步是多線程操作;3、異步的效率要高于同步。
本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。
ajax異步請(qǐng)求:
異步請(qǐng)求就當(dāng)發(fā)出請(qǐng)求的同時(shí),瀏覽器可以繼續(xù)做任何事,Ajax發(fā)送請(qǐng)求并不會(huì)影響頁(yè)面的加載與用戶的操作,相當(dāng)于是在兩條線上,各走各的,互不影響。一般默認(rèn)值為true。異步請(qǐng)求可以完全不影響用戶的體驗(yàn)效果,無(wú)論請(qǐng)求的時(shí)間長(zhǎng)或者短,用戶都在專心的操作頁(yè)面的其他內(nèi)容,并不會(huì)有等待的感覺。
比如:
$.ajax({ type:"POST", url:"Venue.aspx?act=init", dataType:"html", success:function(result){ //function1() f1(); f2(); } failure:function (result) { alert('Failed'); }, } function2();
說(shuō)明:上述代碼中,當(dāng)ajax塊發(fā)出請(qǐng)求后,他將停留function1(),等待server端的返回,但同時(shí)(在這個(gè)等待過程中),前臺(tái)會(huì)去執(zhí)行function2()。
ajax同步請(qǐng)求:
同步請(qǐng)求即是當(dāng)前發(fā)出請(qǐng)求后,瀏覽器什么都不能做,必須得等到請(qǐng)求完成返回?cái)?shù)據(jù)之后,才會(huì)執(zhí)行后續(xù)的代碼,相當(dāng)于是排隊(duì),也就是說(shuō),當(dāng)JS代碼加載到當(dāng)前ajax的時(shí)候會(huì)把頁(yè)面里所有的代碼停止加載,頁(yè)面處于一個(gè)假死狀態(tài),當(dāng)這個(gè)ajax執(zhí)行完畢后才會(huì)繼續(xù)運(yùn)行其他代碼頁(yè)面解除假死狀態(tài)(即當(dāng)ajax返回?cái)?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();
說(shuō)明:上述代碼中,當(dāng)把a(bǔ)syn設(shè)為false時(shí),這時(shí)ajax的請(qǐng)求時(shí)同步的,也就是說(shuō),這個(gè)時(shí)候ajax塊發(fā)出請(qǐng)求后,他會(huì)等待在function1()這個(gè)地方,不會(huì)去執(zhí)行function2(),直到function1()部分執(zhí)行完畢。
看完了對(duì)于ajax同步與異步請(qǐng)求的意思后,我們就來(lái)看看ajax同步請(qǐng)求與異步請(qǐng)求的區(qū)別。
ajax同步請(qǐng)求與異步請(qǐng)求的區(qū)別:
同步是指一個(gè)線程要等待上一個(gè)線程執(zhí)行完才能開始執(zhí)行,同步可以看做是一個(gè)單線程操作,只要客戶端請(qǐng)求了,在服務(wù)器沒有反饋信息之前是一個(gè)線程阻塞狀態(tài)。
異步是一個(gè)線程在執(zhí)行中,下一個(gè)線程不必等待它執(zhí)行完就可以開始執(zhí)行。異步肯定是個(gè)多線程。在客戶端請(qǐng)求時(shí),可以執(zhí)行其他線程,并且在把這個(gè)線程存放在他的隊(duì)列里面,有序的執(zhí)行。
異步的效率要高于同步。如果數(shù)據(jù)在線程間共享,那么必須使用同步!
異步模式下:
當(dāng)我們使用AJAX發(fā)送完請(qǐng)求后,可能還有代碼需要執(zhí)行。這個(gè)時(shí)候可能由于種種原因?qū)е路?wù)器還沒有響應(yīng)我們的請(qǐng)求,但是因?yàn)槲覀儾捎昧水惒綀?zhí)行方式,所有包含AJAX請(qǐng)求代碼的函數(shù)中的剩余代碼將繼續(xù)執(zhí)行。如果我們是將請(qǐng)求結(jié)果交由另外一個(gè)JS函數(shù)去處理的,那么,這個(gè)時(shí)候就好比兩條線程同時(shí)執(zhí)行一樣。
同步模式下:
當(dāng)我們使用AJAX發(fā)送完請(qǐng)求后,后續(xù)還有代碼需要執(zhí)行,我們同樣將服務(wù)器響應(yīng)交由另一個(gè)JS函數(shù)去處理,但是這時(shí)的代碼執(zhí)行情況是:在服務(wù)器沒有響應(yīng)或者處理響應(yīng)結(jié)果的JS函數(shù)還沒有處理完成return時(shí),包含請(qǐng)求代碼的函數(shù)的剩余代碼是不能夠執(zhí)行的。就好比單線程一樣,請(qǐng)求發(fā)出后就進(jìn)入阻塞狀態(tài),知道接觸阻塞余下的代碼才會(huì)繼續(xù)執(zhí)行。
感謝各位的閱讀,以上就是“ajax同步和異步的區(qū)別有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)ajax同步和異步的區(qū)別有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!