如何在ajax调用中停止所有执行的JavaScript?

时间:2015-10-26 07:05:49

标签: javascript jquery ajax validation

我有以下JavaScript代码:

Interface.init = function()
{
    $.ajax({
        type: "POST",
        url: "/Validate",
        async: false,
        success: function (data) {
            if (data.Valid) {
                // All good, continue executing JS code
            }
            else {
                // Display error messsage, attempt to stop executing JS code...
                return false;
            }
        },
        error: function () {
            // Display error message, attempt to stop executing JS code...
            return false;
        }
    });

    // More JavaScript functions used to load content, etc...
}

索引页面在加载时调用Interface.init()

<html>
    <script type="text/javascript">
        $(document).ready(function () {
            Interface.init();
        });
    </script>
</html>

ajax函数用于检查加载页面的设备是否有效。它运行synchronously,因此页面在继续之前等待验证完成。如果验证成功,则退出ajax函数,并继续执行其余的JavaScript代码。如果验证失败(或验证期间出错),我不希望执行任何剩余的JavaScript代码。

我目前正在使用return false,但我还尝试了return并抛出了throw new Error("Validation failed")之类的错误(正如许多其他问题所示)。

所有这些似乎都是退出ajax函数,页面上所有剩余的JavaScript继续执行。在ajax函数之外,这些方法按预期工作以阻止剩余代码执行,但我希望在ajax函数内完成此操作。这有可能吗?

1 个答案:

答案 0 :(得分:3)

你可以在函数之前创建一个外部变量,然后在它之后使用它,例如:

Interface.init = function()
{
    var error = false;
    $.ajax({
        type: "POST",
        url: "/Validate",
        async: false,
        success: function (data) {
            if (data.Valid) {
                // All good, continue executing JS code
            }
            else {
                error = true;
            }
        },
        error: function () {
            error = true;
        }
    });

    if (error) return;
    // More JavaScript functions used to load content, etc...
}

但实际上,我建议不要使用async=false,而不是那样,你可以将其余的代码包装在一个函数中,并在回调中调用它,例如:

Interface.init = function()
{
    $.ajax({
        type: "POST",
        url: "/Validate",
        success: function (data) {
            if (data.Valid) {
                // All good, continue executing JS code
                loadAll();
            }
        },
        error: function () {

        }
    });

    function loadAll() {
        // More JavaScript functions used to load content, etc...
    }
}