小编典典

如何让 jQuery 在返回之前等待 Ajax 调用完成?

all

我有一个需要登录的服务器端功能。如果用户已登录,该函数将在成功时返回 1。如果没有,该函数将返回登录页面。

我想使用 Ajax 和 jQuery 调用该函数。我所做的是使用普通链接提交请求,并在其上应用点击功能。如果用户未登录或函数失败,我希望 Ajax 调用返回
true,以便触发 href。

但是,当我使用以下代码时,函数会在 Ajax 调用完成之前退出。

如何优雅地将用户重定向到登录页面?

$(".my_link").click(
    function(){
    $.ajax({
        url: $(this).attr('href'),
        type: 'GET',
        cache: false,
        timeout: 30000,
        error: function(){
            return true;
        },
        success: function(msg){ 
            if (parseFloat(msg)){
                return false;
            } else {
                return true;
            }
        }
    });
});

阅读 131

收藏
2022-05-09

共1个答案

小编典典

如果您不希望$.ajax()函数立即返回,请将async选项设置为false

$(".my_link").click(
    function(){
    $.ajax({
        url: $(this).attr('href'),
        type: 'GET',
        async: false,
        cache: false,
        timeout: 30000,
        fail: function(){
            return true;
        },
        done: function(msg){ 
            if (parseFloat(msg)){
                return false;
            } else {
                return true;
            }
        }
    });
});

但是,我会注意到这与 AJAX 的观点背道而驰。此外,您应该在failanddone函数中处理响应。只有在从服务器收到响应时才会调用这些函数。

2022-05-09