【发布时间】:2016-09-04 11:44:09
【问题描述】:
我有一系列验证检查,其中一个恰好使用 ajax 来检查地址。在提交表单之前,我需要整个数组返回 true 并按顺序触发。我尝试使用承诺,但无济于事。
这就是问题所在。如果我输入了错误的地址或将输入留空,则它不会提交表单(好)。但是,当我实际输入有效地址时,尽管我在 validations 数组中的其他验证具有错误值,但表单仍会提交。我做错了什么?
var validations = [validateInputPresence, validatePassword, validateAddress];
$continueButton.on('click', function() {
toggleSpinner();
subscribe().then(function() {
submitForm(); // This is firing even when some values are false in the array
}, function() {
toggleSpinner();
});
});
function subscribe() {
var promises = validations.map(function(validation) {
return validation();
});
return Promise.all(promises);
}
function validatePassword() {
var password = $password.val();
var format = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])[^+&\n]{8,}$/;
return validateInput(format.test(password));
}
function validateAddress() {
return new Promise(function (resolve, reject) {
$.ajax({
type: 'POST',
url: '/address/validate',
data: $form.serialize(),
dataType: 'json',
success: function(response) {
var hasValidAddres = response.Data === 200;
validateInput(hasValidAddres);
hasValidAddres ? resolve() : reject();
},
error: function() {
toggleSpinner();
}
});
});
}
function validateInput(validation) {
if (validation) {
return true;
} else {
return false;
}
}
【问题讨论】:
-
能否展示函数的内容:validatePassword 和 validateAddress?
-
我用
validatePassword()函数和validateInput()函数更新了代码,显示了如何返回真/假值。 -
验证密码似乎没有返回承诺
-
validation()是在subscribe()内部循环的当前函数 -
是的,我的错。我编辑了
标签: javascript jquery arrays ajax promise