【问题标题】:Unable to redirect after jQuery Ajax calljQuery Ajax 调用后无法重定向
【发布时间】:2015-07-10 11:41:08
【问题描述】:

我想在服务器成功响应后实现重定向。我尝试按照here 描述的相同方式进行操作,但不幸的是无法实现所需的行为。

将数据发送到服务器并应该执行重定向的函数如下:

 $("#btn-login").click(function(){
                if ($('#loginform').valid() == false) {
                    return false;
                }
                var formData = $("form#loginform").serialize();
                $.ajax({
                    type: "POST",
                    url: "/authentication/login",
                    data: formData,
                    success: function(data, textStatus){
                        console.log(formData);
                        //console.log(data);
                        if(data.redirect){
                            window.location.href = data.redirect;
                        }
                    },
                    error: function(e){
                        alert(e.responseText);
                    }
                });
            });

在服务器端,执行如下函数:

/* Handle Login POST */
router.post('/login', passport.authenticate('login', {
    successRedirect: '/',
    failureRedirect: '/authentication',
    failureFlash : true
}));

有谁知道为什么客户端的函数在收到服务器的响应后没有重定向?

谢谢!

【问题讨论】:

    标签: javascript jquery ajax redirect


    【解决方案1】:

    console.log(data) 的输出是什么?

    似乎服务器正在重定向,所以当前端代码收到服务器的输出时,它已经是 successRedirect 或 failureRedirect 页面,因此您的代码 window.location.href = data.redirect 未到达。检查data,它应该具有重定向属性。如果没有,我的猜测是服务器已经在进行重定向,而您没有看到它,因为您是通过 ajax 调用它。这可以在网络检查器的网络选项卡中确认。

    【讨论】:

    • 数据实际上是应该重定向到的页面的html源。
    • 确认服务器正在执行重定向,让我查看护照库文档以了解如何返回 json 响应而不是重定向。这样你就可以通过ajax登录并重定向自己
    • 检查passportjs.org/docs 上的自定义回调部分。这样你就可以从你的服务器返回一个 json 而不是重定向,比如{redirect: 'mySecurePageRoute'}。现在在你的 ajax 响应中你应该得到一个 json 对象,而不是一堆 html
    猜你喜欢
    • 2010-09-15
    • 2011-02-25
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2013-08-08
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多