淺談js的ajax的異步和同步請求的問題
先來看以下代碼:
var flag=true;
var index=0;
$.ajax({
url: "http://www.dhdzp.com/",
success: function(data){
flag=false;
}
});
while(flag){
index++;
}
alert(index);
請問最后alert的index的結果是多少?
可能有人會說0唄。實際上卻沒那么簡單。大家可以自己試試看。可以看到最終程序進入了一個死循環(huán)!怎么會這樣呢!
我們在看一段代碼:
var flag=true;
$.ajax({
url: "http://www.dhdzp.com/",
success: function(data){
flag=false;
}
});
alert(flag);
大家看最后alert出flag的值是多少呢?沒錯,是true!為什么呢?明明我們在ajax請求成功了將flag設為false,怎么還是true呢?這實際上是Ajax的異步機制造成的。
這里解釋一下,同步和異步。js是單線程的,由于執(zhí)行ajax請求會消耗一定的時間,甚至出現(xiàn)了網(wǎng)絡故障而遲遲得不到返回結果;這時,如果同步執(zhí)行的話,就必須等到ajax返回結果以后才能執(zhí)行接下來的代碼,如果ajax請求需要1分鐘,程序就得等1分鐘。如果是異步執(zhí)行的話,就是告訴ajax代碼“老兄,既然你遲遲不返回結果,我先不等你了,我還有一大堆代碼要執(zhí)行,等你執(zhí)行完了給我說一下”。
Ajax默認是異步請求的,所以就出現(xiàn)了上面我們看到的結果。也就是ajax里面的代碼還沒有執(zhí)行完,先執(zhí)行了下面的代碼。
那么如何使Ajax執(zhí)行同步請求呢?這就需要設置async。
代碼如下:
var flag=true;
var index=0;
$.ajax({
url: "http://www.dhdzp.com/",
async:false,
success: function(data){
flag=false;
}
});
while(flag){
index++;
}
alert(index);
async默認是true,也就是異步,我們設置為false,即為同步。這時我們再看看結果吧。
以上就是小編為大家?guī)淼臏\談js的ajax的異步和同步請求的問題全部內容了,希望大家多多支持腳本之家~
- jQuery ajax全局函數(shù)處理session過期后的ajax跳轉問題
- ajax實現(xiàn)session不過期(避免頁面過期的現(xiàn)象)
- ajax session過期問題的幾個解決方案
- 淺析ajax請求json數(shù)據(jù)并用js解析(示例分析)
- 跨域請求之jQuery的ajax jsonp的使用解惑
- 原生 JS Ajax,GET和POST 請求實例代碼
- js每隔5分鐘執(zhí)行一次ajax請求的實現(xiàn)方法
- JS實現(xiàn)定時任務每隔N秒請求后臺setInterval定時和ajax請求問題
- 詳解JavaScript for循環(huán)中發(fā)送AJAX請求問題
- 分享JavaScript監(jiān)聽全部Ajax請求事件的方法
- JS Ajax請求會話過期處理問題解決方法分析
相關文章
JavaScript動畫原理之如何使用js進行動畫效果的實現(xiàn)
在現(xiàn)在做頁面很多時候都會用上動畫效果,比如下拉菜單,側邊搜索欄,層的彈出與關閉等等,下面這篇文章主要給大家介紹了關于JavaScript動畫原理之如何使用js進行動畫效果實現(xiàn)的相關資料,需要的朋友可以參考下2023-04-04
JavaScript之瀏覽器對象_動力節(jié)點Java學院整理
JavaScript可以獲取瀏覽器提供的很多對象,并進行操作。下面通過本文給大家介紹JavaScript之瀏覽器對象的相關知識,一起看看吧2017-07-07
Javascript數(shù)組的?splice?方法詳細介紹
這篇文章主要介紹了Javascript數(shù)組的splice方法詳細介紹,splice方法通過刪除或替換現(xiàn)有元素或者原地添加新的元素來修改數(shù)組,并以數(shù)組形式返回被修改的內容。此方法會改變原數(shù)組2022-09-09
javascript實現(xiàn)發(fā)送短信驗證碼案例
這篇文章主要為大家詳細介紹了javascript實現(xiàn)發(fā)送短信驗證碼案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07

