在验证if条件之前,始终执行else块

时间:2017-03-22 05:11:55

标签: jquery

在验证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;
            }
        }
    });
}

3 个答案:

答案 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();