【发布时间】:2015-02-12 22:23:10
【问题描述】:
是否可以在 ajax 调用成功的情况下阻止表单提交然后重新提交相同的表单?
此时它到达了成功位,但它没有重新提交应该提交的表单并将用户重定向到http://example.com 网站。
非常感谢您提前提供的任何帮助
如果不能以这种方式做到这一点,还有其他方法可以让它工作吗?
$(document).ready(function() {
$('form').submit(function(e) {
e.preventDefault();
$.ajax({
url: $('form').attr('action'),
type: 'post',
data: $('form').serialize(),
success: function(data) {
if (data == 'true')
{
$('form').attr('action', 'http://example.com');
$('form').unbind('submit').submit(); // mistake: changed $(this) to $('form') - Problem still persists though it does not resubmit and redirect to http://example.com
}
else
{
alert('Your username/password are incorrect');
}
},
error: function() {
alert('There has been an error, please alert us immediately');
}
});
});
});
编辑:
Stackoverflow 帖子签出以下代码:
我只是想提一下,我也尝试过这段代码,但无济于事。
var ajaxSent = false;
$(document).ready(function() {
$('form').submit(function(e) {
if ( !ajaxSent)
e.preventDefault();
$.ajax({
url: $('form').attr('action'),
type: 'post',
data: $('form').serialize(),
success: function(data) {
if (data == 'true')
{
alert('submit form');
ajaxSent = true;
$('form').attr('action', 'http://example.com');
$('form').submit();
return true;
}
else
{
alert('Your username/password are incorrect');
return false;
}
},
error: function() {
alert('There has been an error, please alert us immediately');
return false;
}
});
});
});
我也试过这个代码,但没有任何运气。
$(document).ready(function() {
$('form').submit(function(e) {
e.preventDefault();
$.ajax({
url: $('form').attr('action'),
type: 'post',
data: $('form').serialize(),
success: function(data) {
if (data == 'true')
{
$('form').attr('action', 'http://example.com');
$('form').unbind('submit').submit();
return true;
}
else
{
alert('Your username/password are incorrect');
return false;
}
},
error: function() {
alert('There has been an error, please alert us immediately');
return false;
}
});
});
});
【问题讨论】:
-
这很可能会无限提交表单。起初 ajax 提交表单,成功时它再次通过相同的 ajax 并再次成功..然后再次..然后再次。
-
@Saching 为什么?他们在第二次提交表单之前删除(嗯,试图删除)
submit事件处理程序。 -
@AnthonyGrist 但在解除绑定后,会调用相同的处理程序,因为 submit 后面跟着它。不会吗?还是我错了?
-
@Saching 你错了。当事件处理程序未绑定时,它就消失了——它不能被任何东西调用。
-
您可以发布自己的答案,但作为答案,而不是通过编辑您的原始问题!
标签: javascript jquery