最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

防止重復(fù)發(fā)送 Ajax 請求

 更新時間:2017年02月15日 09:48:09   作者:母豬賽貂嬋  
本文主要介紹防止重復(fù)發(fā)送 Ajax請求的方法。具有很好的參考價值,下面跟著小編一起來看下吧

要考慮并理解 success, complete, error, timeout 這些事件的區(qū)別,并注冊正確的事件,一旦失誤,功能將不再可用;

不可避免地比普通流程要要多注冊一個 complete 事件;

恢復(fù)狀態(tài)的代碼很容易和不相干的代碼混合在一起;

推薦用主動查詢狀態(tài)的方式(A、B,jQuery 為例)或工具函數(shù)的方式(C、D)來去除重復(fù)操作,并提供一些例子作為參考:

A. 獨占型提交

只允許同時存在一次提交操作,并且直到本次提交完成才能進行下一次提交。

module.submit = function() {
 if (this.promise_.state() === 'pending') {
 return
 }
 return this.promise_ = $.post('/api/save')
}

B. 貪婪型提交

無限制的提交,但是以最后一次操作為準;亦即需要盡快給出最后一次操作的反饋,而前面的操作結(jié)果并不重要。

module.submit = function() {
 if (this.promise_.state() === 'pending') {
 this.promise_.abort()
 }
 // todo
}

比如某些應(yīng)用的條目中,有一些進行類似「喜歡」或「不喜歡」操作的二態(tài)按鈕。如果按下后不立即給出反饋,用戶的目光焦點就可能在那個按鈕上停頓許久;如果按下時即時切換按鈕的狀態(tài),再在程序上用 abort 來實現(xiàn)積極的提交,這樣既能提高用戶體驗,還能降低服務(wù)器壓力,皆大歡喜。

C. 節(jié)制型提交

無論提交如何頻繁,任意兩次有效提交的間隔時間必定會大于或等于某一時間間隔;即以一定頻率提交。

module.submit = throttle(150, function() {
 // todo
})

如果客戶發(fā)送每隔100毫秒發(fā)送過來10次請求,此模塊將只接收其中6個(每個在時間線上距離為150毫秒)進行處理。

這也是解決查詢沖突的一種可選手段,比如以知乎草稿舉例,仔細觀察可以發(fā)現(xiàn):

編輯器的 blur 事件會立即觸發(fā)保存;

保存按鈕的 click 事件也會立即觸發(fā)保存;

但是存在一種情況會使這兩個事件在數(shù)毫秒內(nèi)連續(xù)發(fā)生——當焦點在編輯器內(nèi)部,并且直接去點擊保存按鈕——這時用 throttle 來處理是可行的。

另外還有一些事件處理會很頻繁地使用 throttle,如: resize、scroll、mousemove。

D. 懶惰型提交

任意兩次提交的間隔時間,必須大于一個指定時間,才會促成有效提交;即不給休息不干活。

module.submit = debounce(150, function() {
 // todo
})

還是以知乎草稿舉例,當在編輯器內(nèi)按下 ctrl + s 時,可以手動保存草稿;如果你連按,程序會表示不理解為什么你要連按,只有等你放棄連按,它才會繼續(xù)。

============

更多記憶中的例子

方式 C 和 方式 D 有時更加通用,比如這些情況:

游戲中你撿到一把威力強大的高速武器,為了防止你的子彈在屏幕上打成一條直線,可以 throttle 來控制頻率;

在彈幕型游戲里,為了防止你把射擊鍵夾住來進行無腦游戲,可以用 debounce 來控制頻率;

在編譯任務(wù)里,守護進程監(jiān)視了某一文件夾里所有的文件(如任一文件的改變都可以觸發(fā)重新編譯,一次執(zhí)行就需要2秒),但某種操作能夠瞬間造成大量文件改變(如 git checkout),這時一個簡單的 debounce 可以使編譯任務(wù)只執(zhí)行一次。

而方式 C 甚至可以和方式 B 組合使用,比如自動完成組件(Google 首頁的搜索就是):

當用戶快速輸入文本時(特別是打字能手),可以 throttle keypress 事件處理函數(shù),以指定時間間隔來提取文本域的值,然后立即進行新的查詢;

當新的查詢需要發(fā)送,但上一個查詢還沒返回結(jié)果時,可以 abort 未完成的查詢,并立即發(fā)送新查詢;

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • ArtEditor富文本編輯器增加表單提交功能

    ArtEditor富文本編輯器增加表單提交功能

    artEditor是一款基于jQuery的移動端富文本編輯器,支持插入圖片,后續(xù)完善其他功能。接下來通過本文給大家介紹ArtEditor富文本編輯器增加表單提交功能,對arteditor編輯器相關(guān)知識感興趣的朋友一起學習吧
    2016-04-04
  • layui禁用側(cè)邊導(dǎo)航欄點擊事件的解決方法

    layui禁用側(cè)邊導(dǎo)航欄點擊事件的解決方法

    今天小編就為大家分享一篇layui禁用側(cè)邊導(dǎo)航欄點擊事件的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 下雪了 javascript實現(xiàn)雪花飛舞

    下雪了 javascript實現(xiàn)雪花飛舞

    下雪了,這篇文章主要介紹了javascript實現(xiàn)雪花飛舞,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • JavaScript圖片懶加載的優(yōu)化方法詳解

    JavaScript圖片懶加載的優(yōu)化方法詳解

    這篇文章主要為大家詳細介紹了JavaScript圖片懶加載的優(yōu)化方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • CocosCreator Typescript制作俄羅斯方塊游戲

    CocosCreator Typescript制作俄羅斯方塊游戲

    目前關(guān)于cocos開發(fā)俄羅斯方塊的文章幾乎寥寥無幾,因此本文將主要介紹如何通過CocosCreator Typescript制作簡單的俄羅斯方塊游戲,代碼具有一定價值,感興趣的同學可以學習一下
    2021-11-11
  • Lab.js初次使用筆記

    Lab.js初次使用筆記

    這篇文章主要介紹了Lab.js初次使用筆記,本文對比了普通動態(tài)加載JS文件的技術(shù)和使用Lab.js加載JS文件的技術(shù),并給出了Lab.js加載示例,需要的朋友可以參考下
    2015-02-02
  • PHP實現(xiàn)基于Redis的MessageQueue隊列封裝操作示例

    PHP實現(xiàn)基于Redis的MessageQueue隊列封裝操作示例

    這篇文章主要介紹了PHP實現(xiàn)基于Redis的MessageQueue隊列封裝操作,結(jié)合實例形式分析了Redis的PHP消息隊列封裝與使用相關(guān)操作技巧,需要的朋友可以參考下
    2019-02-02
  • 基于iframe實現(xiàn)類似于ajax的頁面無刷新

    基于iframe實現(xiàn)類似于ajax的頁面無刷新

    本方法是基于iframe實現(xiàn)的,需求是form表單提交帶有文件上傳的input標簽,示例如下,感興趣的朋友可以參考下
    2014-05-05
  • 微信JSAPI Ticket接口簽名詳解

    微信JSAPI Ticket接口簽名詳解

    這篇文章主要為大家詳細介紹了微信JSAPI Ticket接口簽名,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 原生js實現(xiàn)圖片層疊輪播切換效果

    原生js實現(xiàn)圖片層疊輪播切換效果

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)圖片層疊輪播切換效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評論

天等县| 中江县| 桐城市| 潞西市| 呼伦贝尔市| 即墨市| 高淳县| 和平区| 万安县| 安阳县| 巢湖市| 达尔| 波密县| 柳河县| 澄江县| 渑池县| 永善县| 闵行区| 开原市| 珠海市| 日土县| 肇庆市| 洞口县| 泉州市| 车险| 黔西| 扎鲁特旗| 金阳县| 辽源市| 承德市| 台前县| 宁夏| 循化| 花莲县| 淮滨县| 琼结县| 广饶县| 荣昌县| 凤山市| 承德县| 赞皇县|