【javascript】利用jquery ajaxPrefilter防止ajax重復提交


利用jquery ajaxPrefilter中斷請求

    var pendingRequests = {}; $.ajaxPrefilter(function( options, originalOptions, jqXHR ) { var key = options.url; console.log(key); if (!pendingRequests[key]) { pendingRequests[key] = jqXHR; }else{ //jqXHR.abort(); //放棄后觸發的提交 pendingRequests[key].abort(); // 放棄先觸發的提交 } var complete = options.complete; options.complete = function(jqXHR, textStatus) { pendingRequests[key] = null; if ($.isFunction(complete)) { complete.apply(this, arguments); } }; }); 

Prefilters是一個預過濾器,在每個請求之前被發送和 $.ajax() 處理它們前處理。

options 是請求的選項

originalOptions 值作為提供給Ajax方法未經修改的選項,因此,沒有ajaxSettings設置中的默認值

jqXHR 是請求的jqXHR對象

以上內容的核心思想是維護一個隊列,發送請求時,將請求加入隊列,請求響應后,從隊列中清除,這就保證了在任一時刻只能有一個同樣的請求發送.

局限性:僅僅是前台防止jquery的ajax請求。對於非jquery的ajax請求,不起作用。因為使用的是jquery的ajaxPreFilter函數,僅僅對jquery的ajax請求有作用。

調用abort后jquery會執行error的方法,拋出abort的異常信息。可以使用以下方式區分出該類型的異常。

var ajax = $.ajax({ 'error':function(jqXHR, textStatus, errorThrown){ if(errorThrown != 'abort'){ //ajax被調用abort后執行的方法 alert('您的ajax方法被停止了'); } } })


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM