嗨,如果标题听起来不是很具描述性,目前我在我的rails应用程序中遇到了严重问题,它是一个有条理的应用程序,因此用户可以创建分类广告,所以问题是当用户试图创建一个clasified,有时它由于大量的流量加载几秒钟,有一些不耐烦的用户点击"创建"窗体中的按钮多次,结果是:用户多次创建相同的分类广告,我的意思是,当用户等待时,如果他再次点击创建新按钮请求的创建按钮,那么为什么会有分类是多次创建的。我不知道如何解决这个问题,任何想法?
更新 我想实现服务器端解决方案,而不是前端,我的意思是有没有办法通过控制器验证这一点?还是观点本身?感谢
答案 0 :(得分:1)
我的建议是在所有按钮中使用library(ggplot2)
library(dplyr)
library(scales)
library(lubridate)
data.frame(Month = months(ymd(c("2015-01-01", "2015-01-01","2015-01-01", "2015-02-01","2015-02-01","2015-02-01"))),
types = rep(LETTERS[1:3],2),
percent = c(0.2,NA,NA,.39,.89,.59)) %>%
mutate(Month = factor(Month, levels = month.name),
label = ifelse(!is.na(percent), paste0(round(percent*100), "%"), "")) %>%
ggplot() +
aes(x = Month, y = percent, fill = types) +
geom_bar(stat = "identity", position = position_dodge(w = 0.75)) +
geom_text(position = position_dodge(w = 0.75),
aes(ymax = percent, label = label))
属性,这对您有用:
data-disabled-with
这种方式每次单击一个按钮时,它将被禁用,防止双重提交,并且还会显示“请等待......”文本
如果您在表单中使用客户端验证,请务必小心。在这种情况下,您必须手动删除<%= f.submit "Submit", data: { disable_with: "Wait please..." } %>
属性,否则您的按钮将保持禁用状态。
答案 1 :(得分:0)
我遇到了类似的问题......有两种可靠的解决方案可以防止多次提交表单: -
使用来自jquery的one事件处理程序,只允许触发一次
例如
$("#post_submit_button").one("click", function(){
//run ajax call and use .done and .error notify user
});
其他选项是使用真棒jqeury.validate js库来使用实时验证而不提交表单,当所有值都有效时,提交并禁用该按钮。
例如
$("form#imageupload").validate({
rules: {
"image[title]": {
required: true,
minlength: 3,
maxlength: 100
},
submitHandler: function(form) {
//disable the button
$('#post_button').attr('disabled','disabled');
var formData = new FormData(form);
$.ajax(
})
.done(function (response) {
if (response.success == 'success') {
//alert('success');
} else {
//alert('fail');
}
}).error(function(data) {
//this will run when no server,or ajax cannot go forward
$('#post_button').removeAttr('disabled');
});
return false; // required to block normal submit since you used ajax
}
答案 2 :(得分:-1)
为提交按钮指定disable_with选项。它应该可以部分解决你的问题。
答案 3 :(得分:-2)
我会使用处理你的POST函数的函数返回一个重定向到一个与“创建”按钮相同的页面,只有按钮处于非活动状态