在验证if条件之前,始终执行else块。在验证(clusterId)完全完成其执行之前执行的proceedToNextValidation()。如何等待函数验证(clusterId)完全执行,然后根据其结果评估if-else块。
function validateUpgradateStatus()
{
var target = $("#selectcluster").data("ejDropDownList");
var clusterId = target.model.itemValue;
var isValidated = Validation(clusterId);
if(isValidated )
Error("error msg");
else
proceedToNextValidation();
}
function Validation(id) {
$.ajax({
type: "POST",
url: '@Url.Action("Method", "Controller")',
data: {
clusterId: id,
},
success: function (response) {
if (response.isSdkUpgrading) {
return true;
}
else {
return false;
}
}
});
}
答案 0 :(得分:4)
您的逻辑旨在将Javascript作为同步语言。不幸的是,当你第一次使用像Javascript这样的语言开发时,你和我以及许多其他人一样陷入了同样的陷阱。
所以你的Validation()函数发送一个AJAX请求,然后是ON SUCCESS(又名:HTTP请求成功完成),你的ANONYMOUS SUCCESS CALLBACK FUNCTION会根据结果返回true或false。这里的关键是Validation()函数不以相同的方式返回true或false。立即,验证功能实际上返回' null'。它不会等待AJAX(HTTP)请求完成。
此处的修复是您需要:
选项#1:传递验证第二个参数叫做回调,这是一个函数。然后,将成功AJAX属性设置为参数回调,如下所示:
var callback = function(response){
if(response.isSdkUpgrading)Error("error msg");
else proceedToNextValidation();
}
function Validation(id, callback){
$.ajax({
type: "POST",
url: '@Url.Action("Method", "Controller")',
data: {clusterId: id},
success: callback
});
}
选项#2:将需要等待AJAX(HTTP)请求的逻辑移动到您的匿名成功回调中,如下所示:
function Validation(id){
$.ajax({
type: "POST",
url: '@Url.Action("Method", "Controller")',
data: {clusterId: id,},
success: function(response){
if(response.isSdkUpgrading)Error("error msg");
else proceedToNextValidation();
}
});
}
希望这有帮助。
答案 1 :(得分:2)
理想情况下,您应该将代码置于回调中......
function validateUpgradateStatus()
{
var target = $("#selectcluster").data("ejDropDownList");
var clusterId = target.model.itemValue;
Validation(clusterId);
}
function Validation(id) {
$.ajax({
type: "POST",
url: '@Url.Action("Method", "Controller")',
data: {
clusterId: id,
},
success: function (response) {
if (response.isSdkUpgrading) {
Error("error msg");
}
else {
proceedToNextValidation();
}
}
});
}
答案 2 :(得分:-1)
if(!isValidated)
Error("error msg");
else
proceedToNextValidation();
如果!未验证然后您将收到错误,Else proceedToNextValidation();