1. 程式人生 > >防止重復發送ajax請求

防止重復發送ajax請求

jquery 密碼錯誤 width status request arguments view 放棄 images

前端代碼是當輸入密碼個數為6個的時候,觸發ajax請求,但輸入很快的時候會觸發多個請求,為了防止重復發送請求。

技術分享

可以利用jquery ajaxPrefilterzhong中斷請求

局限性:僅僅對jquery 發送的ajax請求有作用

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

error:function(jqXHR, textStatus, errorThrown){
if(errorThrown != ‘abort‘){
//ajax被調用abort後執行的方法
alert(‘應用加載失敗!‘);

}
}

Demo:

var pendingRequests = {};
jQuery.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
var key = options.url;
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 (jQuery.isFunction(complete)) {
complete.apply(this, arguments);
}
};
});
$.ajax({
type:"post",
url:url,
data:{"act":"checkpwd","password":pwd},
dataType:"json",
success:function(request){

if(request.statu == 0){
Air_View("支付密碼錯誤");
}else{
$("#walletpay").submit();
}

},
error:function(jqXHR, textStatus, errorThrown){
if(errorThrown != ‘abort‘){
//ajax被調用abort後執行的方法
Air_View(‘應用加載失敗!‘);
}
}
});


防止重復發送ajax請求