如何让jQuery等待Ajax调用完成后才返回?

我有一个需要登录的服务器端功能。 如果用户登录,该功能将成功返回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;
            }
        }
    });
});

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

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

但是,我会注意到这与AJAX相反。 另外,您应该在errorsuccess函数中处理响应。 这些功能只有在从服务器收到响应时才会被调用。


我没有使用$.ajax而是$.post$.get函数,所以如果我需要等待响应,我使用这个:

$.ajaxSetup({async: false});
$.get("...");

底层的XMLHttpRequest对象(由jQuery用来发出请求)支持异步属性。 将其设置为false 。 喜欢

async: false
链接地址: http://www.djcxy.com/p/12479.html

上一篇: How do I make jQuery wait for an Ajax call to finish before it returns?

下一篇: Post in flask does not render new template