Javascript 如何限制一分钟内单击元素的次数?
我正在制作一个PM系统,目前我正在添加消息明星系统(以便用户可以明星消息) 问题是,如果用户持续快速地标记和取消标记消息(反复单击消息),则会使服务器陷入混乱(主机将在进程停止之前输入503错误)。要启动邮件,只需单击启动/再次单击取消启动即可 有没有办法防止它被多次点击,或者在一分钟内点击次数x后弹出一个错误?这将防止它过载服务器,因为当您单击星型时,它会发送一个AJAX请求并更新数据库;当您取消启动它时,它也会执行相同的操作 如果在一分钟左右的时间内点击星号,是否有jQuery方式显示错误 以下是我的主演职责:Javascript 如何限制一分钟内单击元素的次数?,javascript,jquery,spam-prevention,flooding,Javascript,Jquery,Spam Prevention,Flooding,我正在制作一个PM系统,目前我正在添加消息明星系统(以便用户可以明星消息) 问题是,如果用户持续快速地标记和取消标记消息(反复单击消息),则会使服务器陷入混乱(主机将在进程停止之前输入503错误)。要启动邮件,只需单击启动/再次单击取消启动即可 有没有办法防止它被多次点击,或者在一分钟内点击次数x后弹出一个错误?这将防止它过载服务器,因为当您单击星型时,它会发送一个AJAX请求并更新数据库;当您取消启动它时,它也会执行相同的操作 如果在一分钟左右的时间内点击星号,是否有jQuery方式显示错误
function addStar(id) {
$('#starimg_' + id).removeClass("not_starred").addClass("starred");
$('#star_' + id).attr({
'title': 'Starred',
'onclick': 'removeStar(' + id + ')'
});
$.get('tools.php?type=addstar', {id: id}, function(data) {
if(data=='true') { // tools.php will echo 'true' if it is successful
alertBox('The message has been starred successfully', 2500);
}
else { alertBox('An error has occurred. Please try again later.'); }
});
}
function removeStar(id) {
$('#starimg_' + id).removeClass("starred").addClass("not_starred");
$('#star_' + id).attr({
'title': 'Not starred',
'onclick': 'addStar(' + id + ')'
});
$.get('tools.php?type=removestar', {id: id}, function(data) {
if(data=='true') { // tools.php will echo 'true' if it is successful
alertBox('The message has been unstarred successfully', 2500);
}
else { alertBox('An error has occurred. Please try again later.'); }
});
}
提前谢谢 在任何情况下,最好不要显示错误消息 考虑在每次单击星号时启动/重置倒计时计时器。一旦倒计时,发送恒星的当前状态。保留用户反馈并遵守速率限制 他们不需要知道有速率限制,也不需要知道它不是每次都发送请求
(描述一个简单问题的话太多了,我想我们知道“在没有图片的情况下给消息加上星号”是什么意思:)下面是addStar函数的示例解决方案。这将在用户上次单击后2秒发送请求,因此,如果用户高兴单击,这些中间单击将不会发送请求,因为计时器将重置
function addStar(id, delayRequests)
{
...
if(delayRequests == true){
clearTimeout(timer);
timer= setTimeout(function() { sendRequestToAddStar(id); },2000);
}
else{
sendRequestToAddStar(id);
}
}
function sendRequestToAddStar(id)
{
$.get('tools.php?type=removestar', {id: id}, function(data) {...
}
您还可以使用以下命令:@zero7:分批处理AJAX请求是什么意思?这是一个非常好的主意。谢谢是的,那是很多词,而且图片是不必要的,这就是我删除它的原因:)哇,谢谢。:)那么,我会对
removeStar()
函数也执行同样的操作,还是只对addStar()
函数使用它?当然可以。。或者你也可以有一个sendRequest和pass参数来决定添加或删除星号,这取决于你自己。好的,太好了。我现在就试试这个。这太完美了。我只是注意到说“邮件已加星号”是愚蠢的,因为当你点击星号时,它显示你加了星号。另外,当我调用函数时,我会怎么做?我是否需要addStar(1234,true)
?那么我将如何使用它?比如,我应该为延迟请求设置什么?