现在有$btn按钮。 绑定单击事件,然后单击一次将POST请求提交到后端。 var$BTN=$('#BTN ' );
$BTN.click(function () ) ) ) )。
$.Ajax({URL:'a.PHP ',type: 'POST ',success: function ) }
控制台. log (ret;
}; );
);
但是,如果用户在很短的时间内多次单击按钮(例如,在1s中快速单击5次),则会向服务器发送很多数据,如果并发量大,则服务器可能无法食用。
您还可能希望在当前请求结束后,服务可以返回数据,然后再启动第二个请求。
因此,请封装$.smartAjax这一方法进行手震修正处理。 有用于决定抖动补偿方式——的参数smartType,如果其值为0,则要求在500ms内只能发出一个请求。
参数smarType的值为1表示只有在前一个服务器接收到包含失败响应的响应后,才能继续发送新请求。
示例: var$BTN1=$('#BTN1 ' );
var$BTN2=$('#BTN2 ' );
$BTN1.click(function () ) ) ) ) )。
每500毫秒最多只发送一个请求
$.smartAjax(smarttype:url: 'a.php ',type: 'POST ',success: function )。
控制台. log (ret;
}; );
);
$BTN2.click(function () ) ) ) ) )。
//只有当前的一个请求收到服务器的响应,才能提出新的请求
$.smartAjax(smarttype:1,url: 'a.php ',type: 'POST ',success: function )。
控制台. log (ret;
}; );
);
$.smartAjax=. //实现它
实现$.smartAjax=(function () )
var _time_start=0,
_flag=1; //为了判断是否可以发送请求
返回函数{
var noop=function,
validfun=function(f ) {
返回类型of f===' function '? f :空值
(,
smartType=opt opt.smartType,
processresponse=function{
['success ',' error ' ].foreach (function (RES funname ) ]
varresfun=valid fun (opt [ RES funname ]|| noop;
opt[resFunName]=function
callback (;
resfun.call(this,arguments ) )。
}
);
(,
typeCallback={
0: function () }
_flag(_time_start=date.now );
if (_ flag==0date.now (-_ time _ start 300 ) )。
_flag=1;
_time_start=Date.now (
}
(,
1: function () }
调用if(_time_start ) smartType=0,然后调用smartType=1可防止禁用
_flag=1;
_time_start=0
}
处理响应(功能) {
_flag=1;
() )
}
(;
varhassmarttype=type callback [ smart type ];
hassmarttypetypecallback [ smart type ] ()
if(_flag ) {
hassmarttype(_flag=0;
return$.Ajax(opt;
} else {
返回$.deferred (
}
}
() );