Javascript 在没有Ajax的情况下发送表单时的Ajax错误
我有以下代码:Javascript 在没有Ajax的情况下发送表单时的Ajax错误,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有以下代码: $("#contactform").validate({ rules: { // ... }, submitHandler: function(form) { var postData = $(form).serializeArray(); var formURL = $(form).attr("action"); $.ajax({ url : formU
$("#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();
}
});
}
});
在两个地方我有$(表单).submit()代码>-我希望在这里不使用AJAX发送表单(提交后的url应更改为表单的one-in-action属性)
目前,数据似乎是使用AJAX发送的—当我添加警报以发送$(form).submit()时代码>警报一个接一个地显示(我准备了PHP脚本以返回不正确的数据)
*编辑*
更改后我的代码是:
我的表格开始了
<form method="post" action="{{ current_url }}" id="contactform" onsubmit="return formAjaxSubmit(this);">
一切似乎都很正常。我的假设是,由于提交处理程序已经附加,所以当您进行另一次提交时,它会再次调用提交处理程序
不要尝试提交同一表单,而尝试使用操作url和序列化数据从当前表单生成另一个表单到另一个表单
请查找以下提交数据的解决方案
1.删除提交处理程序,然后调用submit()。页面将刷新并再次附加提交处理程序。
2.使用一个变量来存储错误标志(我不建议这样做,但仍然是一种方法)。并在发送AJAX请求之前在提交处理程序中使用此标志。我建议的解决方案是
<form action="nonAjaxSubmitHandler.php" onsubmit="return tryAjaxSubmit();">
...
</form>
function tryAjaxSubmit() {
// Ajax code - on success
return false; // stops form submitting via http post
// On error
return true; // form will submit via http post
}
你的表格代码在哪里?我怀疑它进入了一个循环:您提交(submitHandler通过ajax发送),OneError-form重新提交(submitHandler通过ajax发送,错误再次发生,OneError-form重新提交(submitHandler通过ajax发送)所以我的表单是标准的HTML表单,没有什么特别的。我知道在这种情况下它是通过AJAX发送的,所以我想问,如果不使用AJAX,是否可以错误地重新发送表单。对于标准AJAX错误(加载页面内容)如果没有表单,我可以简单地使用window.location.href=url;
重新加载不使用ajax的页面。请参阅下面的答案中的我的解决方案。它会尝试进行ajax提交,如果ajax失败,请返回true,通过传统方法强制表单提交jQuery ajax回调不会干扰事件处理程序。处理程序继续执行即使AJAX请求仍在运行,它也会退出。@ElmoVanKielmo-可以。在tryAjaxSubmit返回之前,表单不会提交。如果使用jquerys“async:false”将AJAX回调设置为同步,则表单不会返回任何内容 option@Husman这似乎是我需要的东西,但我必须以某种方式划分我的验证方法,以便在onsubmit启动时进行验证,而不必提交和发送。我稍后会尝试today@Husman我已经在我的问题中添加了编辑。目前我不知道如何才能让这两件事起作用——jQuery验证和作为des处理错误抄袭beginning@Husman我试过了,但在本例中,验证不是“实时”进行的,而是在单击提交后进行的
formAjaxSubmit(form);
<form action="nonAjaxSubmitHandler.php" onsubmit="return tryAjaxSubmit();">
...
</form>
function tryAjaxSubmit() {
// Ajax code - on success
return false; // stops form submitting via http post
// On error
return true; // form will submit via http post
}
<form method="post" action="{{ current_url }}" id="contactform" onsubmit="return formAjaxSubmit(this);">
<script>
function formAjaxSubmit(form) {
// Do validation
$("#contactform").validate({
rules: {
//....
},
submitHandler: function(form) {
// When form is validated, submit via ajax
var postData = $(form).serializeArray();
var formURL = $(form).attr("action");
$.ajax({
url : formURL+'validate',
type: "POST",
data : postData,
success: function(data, textStatus, jqXHR){
...
return false
},
error: function(jqXHR, exception)
{
return true;
}
});
});
}
</script>