我有这种情况,当提交html表单时,我们调用javascript方法来验证表单。问题是验证是通过Ajax请求调用php函数完成的,该函数返回空的json数组或包含错误的数组。
我正在使用Ajax请求,因为此newValidation
函数将用于我的应用程序上的所有表单,因此所有字段ID名称和内容都与验证消息动态相同。
控制台日志结果为:
Undifiend
应为True
或False
。
所以看起来.done
在console.log之后运行。
我以为.done正等到ajax结束然后才继续?
我之所以要问我需要这个.done首先运行,以便它可以协助应答变量,然后只返回布尔值到表单。这甚至可能吗?
更新:
Html格式:
<form id="systemManagementSettings" action="#" method="POST" onsubmit="return newValidation('systemManagementSettings')">
的JavaScript
function newValidation(formId){
var answer;
var $inputs = $('#'+formId+' :input');
var values = {};
$inputs.each(function() {
values[this.id] = $(this).val();
$( "div#"+this.id+"_validation" ).text("");
});
var FinalValidation = $.ajax({
url: "validation/getValidationData",
type: "POST",
data: {form: formId, values: values},
});
FinalValidation.done(function(data){
var resultArray = JSON.parse(data);
if($.isEmptyObject(resultArray))
{
answer = true;
}
else
{
$.each( resultArray, function( key, value ) {
$( "div#"+key+"_validation" ).text(value);
});
answer = false;
}
});
console.log(answer);
return answer;
}
答案 0 :(得分:0)
如何阻止表单实际提交? 使用event.preventDefault()。
<强>更新强>
在done
函数中提交表单。
function newValidation(formId){
var answer;
var $inputs = $('#'+formId+' :input');
var values = {};
$inputs.each(function() {
values[this.id] = $(this).val();
$( "div#"+this.id+"_validation" ).text("");
});
var FinalValidation = $.ajax({
url: "validation/getValidationData",
type: "POST",
data: {form: formId, values: values},
});
FinalValidation.done(function(data){
var resultArray = JSON.parse(data);
if($.isEmptyObject(resultArray))
{
$.ajax({
url: $('#'+formId).attr('action'),
type: "POST",
data: {form: $('#'+formId).serializeArray()},
});
}
else
{
$.each( resultArray, function( key, value ) {
$( "div#"+key+"_validation" ).text(value);
});
}
});
return false; //all the time
}