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

How do I stop all JavaScript executing from within an ajax call?

本文关键字:JavaScript 执行 ajax 调用      更新时间:2023-09-26

我有以下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() on load:

<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函数内完成的。这有可能吗?

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

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...
    }
}