淺談js的ajax的異步和同步請(qǐng)求的問題
先來看以下代碼:
var flag=true; var index=0; $.ajax({ url: "http://www.dbjr.com.cn/", success: function(data){ flag=false; } }); while(flag){ index++; } alert(index);
請(qǐng)問最后alert的index的結(jié)果是多少?
可能有人會(huì)說0唄。實(shí)際上卻沒那么簡(jiǎn)單。大家可以自己試試看??梢钥吹阶罱K程序進(jìn)入了一個(gè)死循環(huán)!怎么會(huì)這樣呢!
我們?cè)诳匆欢未a:
var flag=true; $.ajax({ url: "http://www.dbjr.com.cn/", success: function(data){ flag=false; } }); alert(flag);
大家看最后alert出flag的值是多少呢?沒錯(cuò),是true!為什么呢?明明我們?cè)赼jax請(qǐng)求成功了將flag設(shè)為false,怎么還是true呢?這實(shí)際上是Ajax的異步機(jī)制造成的。
這里解釋一下,同步和異步。js是單線程的,由于執(zhí)行ajax請(qǐng)求會(huì)消耗一定的時(shí)間,甚至出現(xiàn)了網(wǎng)絡(luò)故障而遲遲得不到返回結(jié)果;這時(shí),如果同步執(zhí)行的話,就必須等到ajax返回結(jié)果以后才能執(zhí)行接下來的代碼,如果ajax請(qǐng)求需要1分鐘,程序就得等1分鐘。如果是異步執(zhí)行的話,就是告訴ajax代碼“老兄,既然你遲遲不返回結(jié)果,我先不等你了,我還有一大堆代碼要執(zhí)行,等你執(zhí)行完了給我說一下”。
Ajax默認(rèn)是異步請(qǐng)求的,所以就出現(xiàn)了上面我們看到的結(jié)果。也就是ajax里面的代碼還沒有執(zhí)行完,先執(zhí)行了下面的代碼。
那么如何使Ajax執(zhí)行同步請(qǐng)求呢?這就需要設(shè)置async。
代碼如下:
var flag=true; var index=0; $.ajax({ url: "http://www.dbjr.com.cn/", async:false, success: function(data){ flag=false; } }); while(flag){ index++; } alert(index);
async默認(rèn)是true,也就是異步,我們?cè)O(shè)置為false,即為同步。這時(shí)我們?cè)倏纯唇Y(jié)果吧。
以上就是小編為大家?guī)淼臏\談js的ajax的異步和同步請(qǐng)求的問題全部?jī)?nèi)容了,希望大家多多支持腳本之家~
- jQuery ajax全局函數(shù)處理session過期后的ajax跳轉(zhuǎn)問題
- ajax實(shí)現(xiàn)session不過期(避免頁面過期的現(xiàn)象)
- ajax session過期問題的幾個(gè)解決方案
- 淺析ajax請(qǐng)求json數(shù)據(jù)并用js解析(示例分析)
- 跨域請(qǐng)求之jQuery的ajax jsonp的使用解惑
- 原生 JS Ajax,GET和POST 請(qǐng)求實(shí)例代碼
- js每隔5分鐘執(zhí)行一次ajax請(qǐng)求的實(shí)現(xiàn)方法
- JS實(shí)現(xiàn)定時(shí)任務(wù)每隔N秒請(qǐng)求后臺(tái)setInterval定時(shí)和ajax請(qǐng)求問題
- 詳解JavaScript for循環(huán)中發(fā)送AJAX請(qǐng)求問題
- 分享JavaScript監(jiān)聽全部Ajax請(qǐng)求事件的方法
- JS Ajax請(qǐng)求會(huì)話過期處理問題解決方法分析
相關(guān)文章
獲取css樣式表內(nèi)樣式的js函數(shù)currentStyle(IE),defaultView(FF)
JS從樣式表取值的函數(shù),IE中以currentStyle,firefox中defaultView來獲取,需要的朋友可以參考下。2011-02-02JavaScript使用setInterval()函數(shù)實(shí)現(xiàn)簡(jiǎn)單輪詢操作的方法
這篇文章主要介紹了JavaScript使用setInterval()函數(shù)實(shí)現(xiàn)簡(jiǎn)單輪詢操作的方法,以實(shí)例形式分析了輪詢操作的原理與javascript實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-02-0220個(gè)必會(huì)的JavaScript面試題(小結(jié))
這篇文章主要介紹了20個(gè)必會(huì)的JavaScript面試題(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-07-07微信開發(fā)之調(diào)起攝像頭、本地展示圖片、上傳下載圖片實(shí)例
這篇文章主要介紹了微信開發(fā)之調(diào)起攝像頭、本地展示圖片、上傳下載圖片實(shí)例,具有一定的參考價(jià)值有興趣的可以了解一下。2016-12-12Typescript 函數(shù)重載的實(shí)現(xiàn)
本文主要介紹了Typescript 函數(shù)重載的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04