Ajax 调用中的 PHP 重定向

Posted

技术标签:

【中文标题】Ajax 调用中的 PHP 重定向【英文标题】:PHP Redirect in Ajax call 【发布时间】:2014-05-22 21:21:30 【问题描述】:

我有一个 Ajax 调用,它将登录表单的值发布到一个 php 文件,如果用户名和密码错误,它将更新上面的用户名和密码 div id= #phplogin 并显示错误消息。

在同一个 PHP 文件中,如果用户名和密码正确,那么我正在重定向页面。但是这种重定向发生在 div 中,整个页面没有被重定向。现在我在用户名和密码上方的 div 中看到了重定向页面。如何完全避免和重定向?

Ajax 调用:

jQuery("#loginForm").validate(
    submitHandler: function() 

    var postvalues =  jQuery("#loginForm").serialize();

    jQuery.ajax
    (
        type: "POST",
        url: "contact/process-loginform.php",
        data: postvalues,
        /* success: function(response)
        
            jQuery("#phplogin").html(response).show('normal');
            jQuery('#inputEmail1, #inputPassword1').val("");
        */
        error: function(response)
        
           jQuery("#phplogin").html(response).show('normal');
           jQuery('#inputEmail1, #inputPassword1').val("");
        
    );

这里是php部分的代码:

if(mysql_num_rows($result) == 0)   // Combo not found
            $phplogin =  '<div class="alert alert-danger fade in">Invalid Username/Password. Please try again.</div>';
            die($phplogin);
        
        else
        
         session_regenerate_id();
         $_SESSION['sess_user_id'] = $result['id'];
         $_SESSION['sess_username'] = $result['username'];
         session_write_close();
         header('Location: ../index.php');
        

现在,如何在 mysql_num_rows($result) == 0 时显示错误,以及如何在 mysql_num_rows($result) != 0 时完全重定向。

请帮忙。

【问题讨论】:

AJAX 调用“在后台”发生,并且作为 ajax 调用的一部分发生的任何重定向都不会影响执行 ajax 调用的代码所在的主页。如果您想要一个 ajax 响应来重定向页面,您必须让您的 ajax 成功处理程序自己执行 window.location = .... 类型重定向。 清除 How to manage a redirect request after a jQuery Ajax call的副本 谢谢,但您能否至少告诉我会话是否会建立? 【参考方案1】:

您通过 ajax 在 php 中打印的任何内容都只会被打印。 php 中的重定向代码在这里不起作用。 您可以从 php 发送某种状态消息并在您的 ajax 调用中检查。 顺便说一句,它会返回成功

【讨论】:

谢谢,但您能否至少告诉我会话是否会建立? —— 是的,会话将被设置。请参阅下面的链接:[链接]***.com/questions/676846/… 在您的代码中:您可以访问您在 javascript 上的“响应”变量上回显的任何内容。成功:函数(响应) jQuery(“#phplogin”).html( response).show('正常'); jQuery('#inputEmail1, #inputPassword1').val(""); 是的,谢谢你它解决了我的问题。我正在寻找完全相同的东西。

以上是关于Ajax 调用中的 PHP 重定向的主要内容,如果未能解决你的问题,请参考以下文章

jQuery ajax 帖子不会重定向到 php 页面

window.location 不使用 Ajax 重定向

jQuery ajax 调用后 IE 7 重定向

链接中的 URL 片段和 JSF 中的 ajax 重定向

从 C# 中的操作重定向到查看页面

Django重定向:没有错误,但没有重定向[重复]