国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

深入講解xhr(XMLHttpRequest)/jsonp請求之a(chǎn)bort

2024-05-06 15:13:51
字體:
供稿:網(wǎng)友

前言

相信大家在工作中經(jīng)常需要使用AJAX,所以當大家看到文章標題的時候可能會覺得這是一個老生常談的話題。

前端開發(fā)中向后端發(fā)起xhr(XMLHttpRequest)請求(代表性的就是熟悉的ajax)是再正常不過的事。

但在前端開發(fā)過程中,不怎么重視xhr的abort(中止掉xhr請求,及表示取消本次請求)。往往會帶來一些不可意料的結(jié)果。

比如:切換tab,發(fā)起xhr請求,渲染同一個列表。就這么簡單的拉取數(shù)據(jù)渲染列表的功能,并且可以根據(jù)tab切換。想想應該是很簡單。但是假如你只顧著發(fā)起xhr請求,而沒有abort掉它,想想會發(fā)生什么。很有可能就是當前選中的tab數(shù)據(jù),并不是你想要的。說白了就是數(shù)據(jù)錯了。這時候你可能就要考慮是不是xhr請求返回數(shù)據(jù)的順序問題。

答案是肯定的,xhr請求返回數(shù)據(jù)順序是不固定的。所以你要做的就是abort掉你之前的xhr請求,然后再發(fā)起一個新的xhr請求。

結(jié)合上面所說的例子可以知道xhr使用不當會存在以下問題:

容易出現(xiàn)頁面最終數(shù)據(jù)與狀態(tài)不一致的問題,這可能再列表篩選是出現(xiàn)的概率比較大。 xhr請求達到一定數(shù)量之后,瀏覽器就會顯得非常的慢。因為有太多的請求在請求服務器資源。

為了解決上面的問題,我們在進行頁面的時候就必須考慮abort掉所有的xhr請求。

那么如何實現(xiàn)xhr的abort方法呢,或者通過何種方式abort掉xhr呢?

一個簡單的xhr

我們都知道,現(xiàn)在的框架(例如:jQuery的ajax模塊)對xhr都進行了封裝,是為了讓我們更好的使用xhr。但是也蒙蔽了我們的眼睛。讓我們拋開框架,來看看一個簡單的xhr怎么實現(xiàn)。

//僅供參考 xhrfunction ajax(type ,url , data , successCallBack , errorCallBack){ let xhr = new XMLHttpRequest(); xhr.onload = ()=>{ if(xhr.status === 200){  return successCallBack(xhr.response||xhr.responseText); } return errorCallBack('請求失敗'); } xhr.onerror = ()=>{ return errorCallBack('出錯了'); } xhr.open(type,url); xhr.send(data ? data:null);}

這就是一個簡單的xhr請求的實現(xiàn),我把它命名為ajax,我們現(xiàn)在可以通過以下方式進行調(diào)用:

ajax('get','/test/getUserList' , undefined , function(result){ console.log('成功了。', result);} ,function(error){ console.log(error);});

如果使用這個方法我們是沒辦法abort掉xhr請求的。好吧,現(xiàn)在我們把它改造一下,讓它支持abort方法:

//僅供參考 xhr.abortfunction ajax(type ,url , data , successCallBack , errorCallBack){ let xhr = new XMLHttpRequest(); xhr.onload = ()=>{ if(xhr.status === 200){  return successCallBack(xhr.response||xhr.responseText); } return errorCallBack('請求失敗'); } xhr.onerror = ()=>{ return errorCallBack('出錯了'); } xhr.open(type,url); xhr.send(data ? data:null); return xhr;//返回XMLHttpRequest實例對象}            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 东丰县| 宝鸡市| 那坡县| 延川县| 江川县| 娄底市| 南陵县| 年辖:市辖区| 大悟县| 天镇县| 长寿区| 北碚区| 邹平县| 阜阳市| 桐柏县| 苍南县| 新建县| 汕尾市| 邯郸县| 宜宾县| 大田县| 西丰县| 铜鼓县| 金溪县| 绵竹市| 屯留县| 兴安县| 沽源县| 平陆县| 盈江县| 阿勒泰市| 多伦县| 仁化县| 汉沽区| 莫力| 娄底市| 乡城县| 大埔区| 楚雄市| 惠州市| 庆云县|