【问题标题】:How to auto redirect a webpage from ajax response if the session is expired?如果会话过期,如何从 ajax 响应自动重定向网页?
【发布时间】:2013-09-20 11:42:38
【问题描述】:

这是我的 javascript..

function rDir() {
    window.location="./index.php?status=session";
}

我的 ajax 来自 php 代码的响应是

<script type="text/javascript">
    rDir();
</script>

如果我在 php 中使用 header('Location:index.php?status=session;); 它可以工作.. 但它会在 div 中加载 index.php 内容...

如果会话已过期,我如何通过 ajax 加载重定向主页?

【问题讨论】:

    标签: javascript ajax session


    【解决方案1】:

    虽然我对 PHP 不是很精通
    但我假设如果您的会话已过期,那么您将获得一个重定向响应代码,如 3xx。
    在这种情况下,浏览器会自动发出新请求并下载请求重定向到的页面。这对您的 ajax 请求是透明的,因此最终在成功处理程序中您将获得登录页面的 HTML。

    顺便说一句,您自己正在设置Location Header 我还假设您自己在处理请求,即使在会话过期时也是如此。在这种情况下

    1.您可以更改返回的状态码。
    2. 使用 ajax 服务在 preodic 间隔查看会话状态。如果您发现会话已过期,则重定向到登录页面。

    【讨论】:

    • 正如我已经告诉你的那样,我从 php 获得重定向的响应,但它不会重定向我的页面,它只是在我的 DIV 中加载登录页面的内容。
    • 那是因为请求是一个ajax请求。打开的页面不会重定向,但会话到期后发出的特定请求将被重定向。
    • 如果我刷新页面或点击一些非 ajax 链接,它会被重定向。当有人点击 ajax 链接时,我也想重定向它。ajax 链接只显示消息但不重定向。
    • @user2788392 正如 Parv Sharma 所说,您正在重定向请求,这意味着该请求不会加载您的脚本我将加载 index.php?session=awesome 尝试我的解决方案之一
    【解决方案2】:

    实现这一点有很多方法:

    1-最简单的:

    Var MustBe = "script type="\text/javascript\">rDir();</script>";
    if(Request.ResponseText == MustBe ){
    rDir();
    }
    

    2-专业:

    $('body').append(request.responsetext);
    

    3-一个好办法:

    if(Request.responsetext.indexof("rDir();") !== -1){
    rDir();
    }
    

    我选择这些方式是因为它很容易在您的代码中实现。

    【讨论】:

    • echo '{"msg": "Login Success!!! Redirecting...","rdir": "home.php"}'; 是我在我的特定登录 ajax 函数中用于重定向的 ajax 请求的 JSON 响应。但是在这个问题中,我正在使用另一个 ajax 函数来检索数据.. 好吧,数据更多的是在这种情况下,我没有使用 JSON 格式或者从 ajax 函数重定向它,我想从 ajax 函数中执行它.而且我没有使用 JQuery .. 无论如何谢谢你的回应.. :)
    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 2021-06-07
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    相关资源
    最近更新 更多