[英]AJAX: Submitting form without page refresh only works once
我正在使用AJAX在幕后提交表单,而不刷新页面。 我遇到的问题是我只能提交一次表格。 提交一次后,on('submit')函数不再有效,我没有错误。 这完全违背了使用AJAX提交表单的目的:/
$(document).on('submit', '#myForm', function(e) {
$.post('mail.php', $(this).serialize(), function (data) {
//SUCCESS
$('.successORfail').html(data);
setTimeout(function(){
$(".successORfail").fadeOut("slow", function () {
$(".successORfail").remove();
});
}, 4500);
}).error(function() {
alert("Fatal Error: mail.php not found!");
});
e.preventDefault();
});
我想知道是否有人遇到类似问题或知道如何解决这个问题? 我希望能够多次提交表单,如果需要,在每次提交后更改表单输入值。
提前谢谢了
你确定AJAX请求没有发生吗? 看起来您正在从页面中删除.successORfail
元素,因此没有任何内容可以在后续调用中附加内容。
检查你的控制台,你可能会注意到每次都会发生ajax调用。
尝试将setTimeout更改为:
var msgEl = $(".successORfail");
setTimeout(function() {
msgEl.fadeOut("slow", function () {
msgEl.empty().show();
});
}, 4500);
您的成功事件处理程序
$('.successORfail').html(data);
setTimeout(function () {
$(".successORfail").fadeOut("slow", function () {
$(".successORfail").remove();
});
}, 4500);
在元素( .successORfail
)中设置内容,然后删除该元素。 下次提交表单时,获得一个成功的响应,并且该函数被执行,元素不再存在以设置内容,因此您不会看到任何更改。
而不是删除元素,只需.hide()
,以便下次可以填充它。 你每次都需要.show()
它。
$(document).on('submit', '#myForm', function(e) {
$.post('mail.php', $(this).serialize(), function (data) {
//SUCCESS
$('.successORfail').html(data).show(); //<-- show
setTimeout(function(){
$(".successORfail").fadeOut("slow", function () {
$(this).hide(); //<-- hide
});
}, 4500);
}).error(function() {
alert("Fatal Error: mail.php not found!");
});
e.preventDefault();
});
同样在fadeOut()
函数中,您可以使用$(this)
访问元素,而不是根据类名重新选择它。
你能添加一些HTML片段吗? 没有关于你的html结构的知识很难帮助,因为如果你通过$('。successORfail')替换表单.html(data); 监听器不会重新绑定到表单。 您还应返回FALSE,因为表单数据是通过javascript发送的。
好吧,似乎你将结果附加到$('.successORfail').html(data);
并删除它。 取出以下内容,它应该多次工作......
$('.successORfail').remove();
没有该元素,就无法进行更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.