亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

防止重復發送 Ajax 請求

發布時間:2020-10-09 14:52:18 來源:腳本之家 閱讀:161 作者:母豬賽貂嬋 欄目:web開發

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

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

恢復狀態的代碼很容易和不相干的代碼混合在一起;

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

A. 獨占型提交

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

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

B. 貪婪型提交

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

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

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

C. 節制型提交

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

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

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

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

編輯器的 blur 事件會立即觸發保存;

保存按鈕的 click 事件也會立即觸發保存;

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

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

D. 懶惰型提交

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

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

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

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

更多記憶中的例子

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

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

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

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

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

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

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

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延津县| 乌拉特后旗| 忻城县| 镇原县| 凤凰县| 仁化县| 福建省| 东城区| 潜江市| 台江县| 汪清县| 西青区| 五河县| 邯郸县| 尉氏县| 新邵县| 新晃| 铁力市| 得荣县| 凤山市| 四平市| 利川市| 方城县| 甘洛县| 四会市| 印江| 旬阳县| 越西县| 彭州市| 双牌县| 邵阳市| 敖汉旗| 明星| 马尔康县| 宁化县| 台中市| 泸西县| 进贤县| 陆良县| 舒城县| 隆子县|