作为表单验证过程的一部分,我试图检查输入到我的一个文本框中的值在数据库中是否已经存在。
我的Submit函数调用第二个验证函数,该函数使用ajax调用返回数据库中匹配的行数。如果行数等于0,我想返回true值。如果行数等于1+,我想返回false值。
由于ajax调用是异步运行的,所以我只会在ajax调用完成之前,函数完成时返回true。
阅读网络我知道我需要使用回调,但是可以弄清楚该做什么/如何重组我的代码。
提交按钮功能
(function() {
$('#NewBookSave').on('click', function(e) {
e.preventDefault();
var newNameValidationResult = newNameValidation();
alert("Validation = " + newNameValidationResult);
// if validation = true submit form data.....
});
}());
验证功能
function newNameValidation() {
var newNameValue = $("#NewName").val();
var nameCount;
var isFormValid = true;
$.ajax({
type: "POST",
url: "data_process.php",
data: {
dataDisplayType: 3,
newNameValue: newNameValue
},
success: function(data) {
nameCount = data;
},
complete: function() {
if (nameCount >= 1) {
showErrorMessage(newNameValue, "Error message");
isFormValid = false;
}
}
});
return isFormValid;
};
答案 0 :(得分:0)
使用async false来同步运行。
$.ajax({
async: false,// other parameters as normal
})
答案 1 :(得分:0)
您可以从类似这样的内容开始。这是一个简单的回调函数,但是您可能想直接使用成功函数而不使用完整函数。如果您不知道,我可以为您重构代码。
var array = [],
map = new Map;
console.log(Array.isArray(array)); // true
console.log(Array.isArray(map)); // false
console.log(array instanceof Map); // false
console.log(map instanceof Map); // true
另一个选择是考虑使用promise而不是回调。
答案 2 :(得分:0)
您应该阅读有关成功和完成的内容。 Ajax之后有两个事件:成功或错误。如果成功,则执行成功的代码;如果出错,则执行错误的代码。但是无论如何,完整的代码都将执行。既然您依靠成功的号召,那么我将把代码放在一起成功。
只需在结果中提交表单,请注意成功的else语句:
SELECT id, up_date, top_list_end_date
FROM advertisements
ORDER BY (CASE WHEN top_list_end_date < up_date OR top_list_end_date IS NULL
THEN up_date
ELSE top_list_end_date
END) desc;