是否可以阻止表单提交,然后在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;
}
});
});
});
答案 0 :(得分:11)
解决方案非常简单,涉及在.ajax()中添加并将async设置为false。另外,我已经重新编写了代码来处理提交按钮,而是在AJAX成功通过时提交了表单。
这是我的工作代码:
$(document).ready(function() {
var testing = false;
$('#btn-login').on('click', function() {
$.ajax({
url: $('form').attr('action'),
type: 'post',
data: $('form').serialize(),
async: false,
success: function(data) {
if (data == 'true')
{
testing = true;
$('form').attr('action', 'https://example.com');
$('form').submit();
}
else
{
alert('Your username/password are incorrect');
}
},
error: function() {
alert('There has been an error, please alert us immediately');
}
});
return testing;
});
});
答案 1 :(得分:6)
在整个代码中选择所有表单标签并不是一个好习惯,如果页面上有多个表单,该怎么办?
另外,您最好将.on()
和.off()
与jQuery一起使用。
$(document).ready(function() {
$('form').on('submit', function(e) {
e.preventDefault();
// cache the current form so you make sure to only have data from this one
var form = this,
$form = $(form);
$.ajax({
url: form.action,
type: form.method,
data: $form.serialize(),
success: function(data) {
if (data == 'true')
{
$form.attr('action', 'http://example.com').off('submit').submit();
}
else
{
alert('Your username/password are incorrect');
}
},
error: function() {
alert('There has been an error, please alert us immediately');
}
});
});
});
答案 2 :(得分:2)
在一行中,您使用$('form')
选择要更改其操作的表单,然后使用$(this)
尝试选择相同的表单。我猜测回调函数中的this
不是你期望的那样,而是你的表单以外的东西(可能是window
对象)。
链接电话:
$('form').attr('action', 'http://example.com').unbind('submit').submit();