Javascript 在两次提交之间进行等待
我有一个表单,在提交时执行AJAX操作。就在用户提交表单之后,我想施加5秒的最小等待时间来再发布一次 有什么更好的办法?我制作了这个脚本(虽然不起作用,但我想我的想法就在这里):Javascript 在两次提交之间进行等待,javascript,jquery,Javascript,Jquery,我有一个表单,在提交时执行AJAX操作。就在用户提交表单之后,我想施加5秒的最小等待时间来再发布一次 有什么更好的办法?我制作了这个脚本(虽然不起作用,但我想我的想法就在这里): 最简单、最标准的方法是使用Javascript原生setTimeout方法 var last_action; function ajax_action() { last_action = Date.getTime(); // AJAX STUFF } $("form#submit_under_wall"+a
最简单、最标准的方法是使用Javascript原生
setTimeout
方法
var last_action;
function ajax_action() {
last_action = Date.getTime();
// AJAX STUFF
}
$("form#submit_under_wall"+array[1]).submit(function(e) {
e.preventDefault(); // Sexier than 'return false'
if(last_action != undefined) {
setTimeout(ajax_action, Date.getTime()-last_action); // Wait for 5s before doing the action
} else {
ajax_action();
}
});
这不起作用,因为每次提交时都会重置时间戳,您需要将提交时间戳移到函数之外。另外,5应该是5*1000 类似于此(未经测试):
使用
window.setTimeout()
函数foo(){alert('test');}
)setTimeout(foo,5000)
如果您正在寻找一种“更好的方法”,那么您真的应该将此应用于服务器端。你在客户端上所做的任何事情都会被用户绕过。他不想以后再提交,他想确保你每5秒只能提交一次。还是不行。假设他们以10倍的速度点击按钮,第一个按钮现在会导致一个ajax操作,接下来的9个按钮会在5秒钟后排队,大约5秒钟后,会有9个ajax操作(而不是相隔5秒钟),你是对的。我再次开始编辑它,然后意识到你的答案是正确的。因此,我将只+1你的。小的改进:如果用户在前5秒内第一次尝试提交,你将强制用户等待。可能发生在复制/粘贴/提交场景中。
var last_action;
function ajax_action() {
last_action = Date.getTime();
// AJAX STUFF
}
$("form#submit_under_wall"+array[1]).submit(function(e) {
e.preventDefault(); // Sexier than 'return false'
if(last_action != undefined) {
setTimeout(ajax_action, Date.getTime()-last_action); // Wait for 5s before doing the action
} else {
ajax_action();
}
});
var submitTime = (new Date()).getTime() - 5000; //let user submit if he clicks within 5s of page load
$("form#submit_under_wall"+array[1]).submit(function(e) {
var now = (new Date()).getTime();
if(now-submitTime > 5000){
submitTime = (new Date()).getTime();
//AJAX ACTION
} else {
alert("Wait 5sec between each post.");
}
e.preventDefault();
});