我有以下代碼:AJAX的錯誤發送形式沒有Ajax
$("#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腳本返回不正確的數據)
*編輯*
變更後我的代碼是:
我開始形式
<form method="post" action="{{ current_url }}" id="contactform" onsubmit="return formAjaxSubmit(this);">
我的完整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;
}
});
}
</script>
但是現在我遇到了使用jQuery驗證字段的問題。當我點擊提交,即使表單沒有完成時,表單也會通過AJAX發送,即使jQuery驗證完成,也只是在顯示PHP驗證結果之後。如果我從形式和submitHandler刪除onsubmit
我:
formAjaxSubmit(form);
一切似乎很好地工作。
你的表單代碼在哪裏?我懷疑它進入一個循環:你提交(submitHandler通過ajax發送),onError - 表單重新提交(submitHandler通過Ajax發送,錯誤再次發生,onError - 表單重新提交(submitHandler通過Ajax發送)等 – Husman
我的表單是標準的HTML形式,沒什麼特別的,我知道這是通過AJAX發送的,所以我問是否有可能重新發送錯誤的表單,而不是使用AJAX,對於沒有表單的標準AJAX錯誤(加載頁面內容),我可以簡單地使用'window.location .href = url;'重新加載頁面不使用AJAX –
在下面的答案中看到我的解決方案。它試圖做ajax提交,如果ajax失敗,你返回true,迫使表單通過傳統方法提交 – Husman