【问题标题】:CodeIgniter/Ajax - RedirectCodeIgniter/Ajax - 重定向
【发布时间】:2011-04-16 16:11:13
【问题描述】:

我有一个使用 CodeIgniter 和 jQuery 的简单登录表单。关于重定向和最佳实践,我有几个问题。这是我的ajax调用代码:

    $(document).ready(function(){
    $("#btnLogin").click(function(e)    {
        $("p.error").hide();
        var email = $("#email").val();
        var password = $("#password").val();
        $(".loader").show();
        $.ajax({
            type: "POST",
            url: "/login/go",
            data: ({email: email, password: password}),
            success: function(data){
                $(".loader").hide();
                if(!data['status'])
                {
                    $("p.error").html(data['error']);
                    $("p.error").slideDown("fast");
                }
                else
                {
                    window.location = "site/index";
                }
            }
        });

        e.preventDefault();
    });
});

如您所见,我从控制器(在 data['status'] 中)返回 true 或 false,然后继续前进。但是,我不确定window.location = "" 是否是正确的方法。安全方面,可以把那个 URL 放在那里吗? 人们必须先登录才能访问站点/索引。正确登录会设置 CI 会话和站点/索引检查。如果有人没有登录,他们会被重定向到登录页面。我只是觉得在我的 ajax 调用中有那个 URL 有点奇怪,哈哈 :(

我试图通过在设置会话后将redirect("site/index") 放入我的控制器来解决这个问题。一些代码,所以这是有道理的:

    if ($this->form_validation->run() == FALSE)
    {
        // validation failed, returns false
    }
    else
    { 
                    // successful
                    // sets session and then i tried doing:
                    redirect("site/index");
    }

但是,这不起作用。我真的不明白为什么它不起作用,所以如果有人能解释一下,我将非常感激。非常感谢。

【问题讨论】:

    标签: jquery ajax codeigniter redirect


    【解决方案1】:

    至于您问题的第一部分
    您始终可以将data['my_redirect']='site/index' 放入控制器并使用data['status'] 将其返回,这样您的网站结构就不会“暴露”给其他人查看。

    至于第二部分
    它不起作用,因为您有一个 Ajax 请求,并且在将数据返回到发出该请求的 JavaScript 之前,您无法在服务器上进行重定向。

    【讨论】:

    • -@trix,你能解释一下第二部分吗?更改 URL 需要返回哪些数据?
    • 请阅读 cabaret 对 d2burke 回答的评论(如果您指的是这个)
    【解决方案2】:

    cabaret - 不确定您是否仍然遇到此问题,但当我搜索它时,我发现了这个,然后最终找到了合适的解决方案,所以我想我会发布我所做的链接。我在 CI 论坛上发布了代码和解释:

    http://codeigniter.com/forums/viewthread/65486/

    希望对你有帮助

    【讨论】:

    • 我将通读该线程,看看是否可以更新我自己的解决方案以改进它。由于我正在使用 AJAX,因此我只需从控制器返回一个 $feedback 数组,其中包含一个名为“redirect”的键。这个键的内容是重定向应该去的地方。在我的 AJAX 成功函数中,然后我执行 window.location = data['redirect'];这似乎工作正常。感谢您访问此链接并发布链接!
    猜你喜欢
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    相关资源
    最近更新 更多