Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 限制消息发送逻辑_Php_Javascript_Jquery - Fatal编程技术网

Php 限制消息发送逻辑

Php 限制消息发送逻辑,php,javascript,jquery,Php,Javascript,Jquery,我正在寻找一些关于如何正确限制每秒发送消息的提示。我有一个ajax请求,当用户按下按钮时,它将数据发送到PHP文件进行处理。我想将用户在一秒钟内按提交按钮的次数限制在一定的范围内。这将有效地允许每秒不超过3条消息。不太确定如何完成此操作,有什么建议吗?您只需在按钮单击事件上设置一个计时器,该计时器首先禁用按钮,然后在特定时间后重新启用 $('.myButton').click(function() { ... $(this).attr('disabled','disabled')

我正在寻找一些关于如何正确限制每秒发送消息的提示。我有一个ajax请求,当用户按下按钮时,它将数据发送到PHP文件进行处理。我想将用户在一秒钟内按提交按钮的次数限制在一定的范围内。这将有效地允许每秒不超过3条消息。不太确定如何完成此操作,有什么建议吗?

您只需在按钮单击事件上设置一个计时器,该计时器首先禁用按钮,然后在特定时间后重新启用

$('.myButton').click(function() {
    ...
    $(this).attr('disabled','disabled');
    setTimeout(function() {
        $(this).removeAttr('disabled');
    }, 2000);
})

您可以在单击后禁用该按钮,然后使用
setTimeout()
在一段时间后重新启用它:

$('#myButton').click(function() {
    $(this).attr('disabled', 'disabled');
    setTimeout(function() {
      $('#myButton').removeAttr('disabled');
    }, 1000);
}
我想将用户在一秒钟内按提交按钮的次数限制在一定的范围内

这很简单,在请求处于活动状态时禁用它,并在经过一定时间后启用它。但是,您需要注意,“单击按钮”与“发送到服务器的请求”不同,您还需要一个服务器端逻辑

$('#theButton').click(function() {
    var button = this,
        ratelimit = true,
        ajaxrunning = true;
    button.disabled = true;
    setTimeout(function() {
        ratelimit = false;
        if (!ajaxrunning)
            button.disabled = false;
    }, 5000);
    $.ajax(…).always(function() {
        ajaxrunning = false;
        if (!timeout)
            button.disabled = false;
    });
}

存储用户上次在您的服务器上提交评论的时间,如果时间不够长,请拒绝以下请求。我也考虑过这种方法,但不知道额外的服务器端检查是否会造成很大的开销需要在服务器端实现速率限制,否则就没用了。您不应该使用
disabled
属性,但是属性。当然,这只是一个支持JavaScript的客户端解决方案。谢谢你的建议。我应该更具体地说明“点击按钮”与“服务器请求”,我真的希望阻止服务器请求和客户端发出超时警报。在发送两个请求之后,在能够为服务器端发送againAs之前,您有5秒的冷却时间,也许我可以只做一个简单的if((现在-上次)<5秒)阻止消息谢谢您的建议