$("#contactform").validate({
rules: {
// ...
},
submitHandler: function(form) {
var postData = $(form).serializeArray();
var formURL = $(form).attr("action");
$.ajax({
url : formURL+'validate',
type: "POST",
data : postData,
success: function(data, textStatus, jqXHR)
{
$.ajax({
url : formURL,
type: "POST",
data : postData,
beforeSend: function(){
// ...
},
success:function(data, textStatus, jqXHR)
{
// ...
},
error: function(jqXHR, exception)
{
$(form).submit();
},
complete: function(){
// ...
}
});
},
error: function(jqXHR, exception)
{
$(form).submit();
}
});
}
});
在2个地方我有$(form).submit(); - 我想在这个地方提交应更改为后发送的形式不使用AJAX(URL一个在行为属性中的形式)。
在好像数据正在使用AJAX发送的时刻 - 当我添加警报发送$(form).submit();警报正在显示一个又一个(我准备PHP脚本返回不正确的数据)
*编辑*
变更后我的代码是:
我开始形式
我的完整AJAX代码:
$("#contactform").validate({
rules: {
content_{{ hash_tag }}: {
required: true,
minlength: 20
},
name_{{ hash_tag }}: {
required: true,
minlength: 2
},
subject_{{ hash_tag }}: {
required: true,
minlength: 10
},
email_{{ hash_tag }}: {
required: true,
email: true
}
},
submitHandler: function(form) {
}
});
function formAjaxSubmit(form) {
var postData = $(form).serializeArray();
var formURL = $(form).attr("action");
$.ajax({
url : formURL+'validate',
type: "POST",
data : postData,
success: function(data, textStatus, jqXHR)
{
$.ajax({
url : formURL,
type: "POST",
data : postData,
beforeSend: function(){
if(data.valid == 1) {
$(form).hide();
$("#formsending").show();
}
},
success:function(data, textStatus, jqXHR)
{
$('#articlecontent').html(data.content);
$("html, body").animate({ scrollTop: 0 });
return false;
},
error: function(jqXHR, exception)
{
return true;
},
complete: function(){
if(data.valid == 1) {
$("#formsending").hide();
$(form).show();
}
}
});
},
error: function(jqXHR, exception)
{
return true;
}
});
}
但是现在我遇到了使用jQuery验证字段的问题。当我点击提交,即使表单没有完成时,表单也会通过AJAX发送,即使jQuery验证完成,也只是在显示PHP验证结果之后。如果我从形式和submitHandler删除onsubmit我:
formAjaxSubmit(form);
一切似乎很好地工作。
+0
你的表单代码在哪里?我怀疑它进入一个循环:你提交(submitHandler通过ajax发送),onError - 表单重新提交(submitHandler通过Ajax发送,错误再次发生,onError - 表单重新提交(submitHandler通过Ajax发送)等 –
+0
我的表单是标准的HTML形式,没什么特别的,我知道这是通过AJAX发送的,所以我问是否有可能重新发送错误的表单,而不是使用AJAX,对于没有表单的标准AJAX错误(加载页面内容),我可以简单地使用'window.location .href = url;'重新加载页面不使用AJAX –
+0
在下面的答案中看到我的解决方案。它试图做ajax提交,如果ajax失败,你返回true,迫使表单通过传统方法提交 –