我的问题与以下javascript函数:
function ValidateDates() {
var valid = false;
birthD = $("#cp1_txtBirthDate").val();
initialD = $("#cp1_txtInitialDate").val();
var regexp = new RegExp("^([1-9]|(0|1|2)[0-9]|30)(/)([1-9]|1[0-2]|0[1-9])(/)((20|19|18)[0-9]{2})$");
if (birthD != "__/__/____" && initialD != "__/__/____") {
if (regexp.test(initialD) && regexp.test(birthD)) {
$.get("ValidateDates.aspx?BirthD=" + birthD + "&InitialD=" + initialD, function (data) {
if (data == 0) {
valid = true;
$("#Dates_span").html("");
}
else {
$("#Dates_span").html("*" + data);
valid = false;
}
});
}
}
return valid;
}
这里当我检查变量有效时我发现它“假”即使它是真的,因为它的初始值是假的,从函数的开头是如何解决它有什么问题?
答案 0 :(得分:6)
当您进行异步调用时,您无法返回类似的值。相反,你应该传递一个回调:
function ValidateDates(callback) {
var valid = false;
birthD = $("#cp1_txtBirthDate").val();
initialD = $("#cp1_txtInitialDate").val();
var regexp = new RegExp("^([1-9]|(0|1|2)[0-9]|30)(/)([1-9]|1[0-2]|0[1-9])(/)((20|19|18)[0-9]{2})$");
if (birthD != "__/__/____" && initialD != "__/__/____") {
if (regexp.test(initialD) && regexp.test(birthD)) {
$.get("ValidateDates.aspx?BirthD=" + birthD + "&InitialD=" + initialD, function(data) {
if (data == 0) {
valid = true;
$("#Dates_span").html("");
}
else {
$("#Dates_span").html("*" + data);
valid = false;
}
callback(valid);
});
}
}
}
然后,将其称为:
ValidateDates(function(isValid)
{
// Do something with isValid
});
答案 1 :(得分:1)
错误是$.get
是异步调用,这意味着函数不会等到从$.get
调用返回结果。它只是进行调用并继续执行 - 因此valid = true
在false
返回后很长时间设置。