【发布时间】:2016-10-03 17:49:33
【问题描述】:
我已经设置了一个 PHP 表单,它本身就可以正常工作,但现在我已经将它与 AJAX 连接起来,当有人提交表单时,我会收到重复提交,所以即使他们只提交了多次向数据库添加详细信息后的表单。
从我的测试看来,它似乎发送了两次数据,但查看其他人的提交,在某些情况下它可能会发送两次以上,但我无法复制。
这是我最初使用的代码:
$("#email-gather").submit(function(e) {
var url = "https://www.ruroc.com/emailgather.php";
$.ajax({
type: "POST",
url: url,
data: $("#email-gather").serialize(),
complete: function(data) {
$('.email-win input.button').val("submitted").attr('disabled', 'disabled').css({'background-color' : '#b34c4c','text-shadow' : 'none'});
}
});
e.preventDefault();
});
我环顾四周寻找解决方案,我看到一些有类似问题的人说应该使用 .live 而不是 .submit 所以我修改了我的代码:
$( "#email-gather" ).live( "submit", function() {
event.preventDefault();
var url = "https://www.ruroc.com/emailgather.php";
$.ajax({
type: "POST",
url: url,
data: $("#email-gather").serialize(),
complete: function(data) {
$('.email-win input.button').val("submitted").attr('disabled', 'disabled').css({'background-color' : '#b34c4c','text-shadow' : 'none'});
}
});
});
但是,这也导致了同样的问题,所以我希望您能找到解决此问题的方法。感谢您就此事提供的任何帮助。
【问题讨论】:
-
你可能需要一个唯一索引
-
e.preventDefault();需要在运行异步.ajax调用之前调用。在第一个片段中,然后不要在最后运行$("#email-gather").submit(function(e) { } -
在第二个片段中,你有正确的顺序,但你没有在
function()中传递event参数 这应该会产生一个编译错误,我会遇到想 -
感谢您的回复,第一部分的第二次提交是一个错字,所以请忽略这一点。我很抱歉。我尝试将 preventDefault 移到 ajax 调用之上,但它没有进行任何更改,并且在第二段的函数中传递“事件”也会产生重复的条目。
标签: php ajax duplicates