PHP在使用Jquery帖子时不重定向

可能重复:
如何在jQuery Ajax调用后管理重定向请求

我有一个使用Jquery验证客户端的表单。 然后,jquery将这些数据传递给一个用于服务器端验证的php脚本。 在php脚本的结尾处,我尝试重定向成功,但没有发生重定向。

Jquery是否干扰重定向? 我怎样才能让PHP脚本重定向。 不想重定向jQuery,BC我打算使用会话,并希望保持会话数据重定向。

代码如下:

JQUERY:

$.ajax({
                    //this is the php file that processes the data and send mail
                    url: "includes/process/processAdminLogin.php",
                    //POST method is used
                    type: "POST",
                    //pass the data        
                    data: dataString,    
                    //indicate result is text
                    dataType: "text",
                    //Do not cache the page
                    cache: false,
                    //success
                    success: function (data) {
                        $('input').removeAttr('disabled'); //enable input fields again.

                        if(data == "fail"){
                            $("#statusMessage").html("");
                            $("#statusMessage").html("<p class='statusBoxWarning'>Username and password do not match!</p>");
                            $('button').removeAttr('disabled');
                            document.forms[0].reset();
                        }                               
                    }
                }); 

PHP

if($correctPass == 1){
ob_start();
session_start();
$_SESSION['usernameIdentity'] = $userName;
unset($userName, $userPass);
header("Location: ../../adminDashboard.html");
exit;
}else{
echo "fail";
}

php脚本到达重定向部分并挂起。 我真的想保持jQuery的功能,以及php重定向。 有更好的方法吗?

谢谢!

                              FINAL WORKING SOLUTION:

好的,在这篇文章和其他类似帖子的输入之后,这就是我作为工作解决方案的内容。 它可能不是最有效或最漂亮的解决方案,但它有效,并且现在将不得不做。

JQUERY

$.ajax({
                    //this is the php file that processes the data and send mail
                    url: "includes/process/processAdminLogin.php",
                    //GET method is used
                    type: "POST",
                    //pass the data        
                    data: dataString,    
                    //indicate result is text
                    dataType: "text",
                    //Do not cache the page
                    cache: false,
                    //success
                    success: function (data) {
                        $('input').removeAttr('disabled'); //enable input fields again.
                        if(data == "success"){
                            $('#statusMessage').html('<form action="http://www.example.com/test/userRegistration/adminDashboard.html" name="userSubscription" method="post" style="display:none;"><input type="text" name="username" value="' + reg_contact_username + '" /><input type="text" name="password" value="' + reg_contact_password + '" /></form>');
                            document.forms['userSubscription'].submit();
                        }else{alert("couldn t redirect");}                              

                    }
                }); 

PHP

if($correctPass == 1){
echo "success";
}else{
echo "fail";
}

接收重定向页面将不得不再次验证用户名和密码,因此验证将被执行2倍......这实际上效率低下。 如果有人能为我提供更好的解决方案 - 请! 样本写出也会有帮助。

谢谢!


由于AJAX发生在“幕后”(可以这么说),您的重定向只会中断对JavaScript处理程序的响应。

您需要返回URL并让您的回调将浏览器踢到新的位置。

更新:

在本文中,由于您必须将数据返回到前端,因此您需要添加status或类似变量,以便根据调用是否失败切换前端行为。

更新2:

为了回应您的解决方案,我强烈建议您不要使用表单提交技术。 正如你所说,效率不高,并不美观,而且需要两倍的工作量(验证用户2次)。

如果用户成功登录,为什么不使用PHP的内置会话处理来设置会话,然后只需在简单的JavaScript浏览器重定向后检查会话?

JavaScript的重定向就像window.href = "http://mylocation"一样简单,如果你对PHP的会话了解不多,你可以使用我建立的这个类(请不要window.href = "http://mylocation"也管理cookies,这就是一个愚蠢的疏忽)。


你在哪里冲洗你的输出缓冲区? 尝试添加ob_end_flush();header()重定向之后,看看是否有效。

编辑:也许把你的相对URI为绝对URI将解决你的问题。 这是直接从php.net中取得的一个通用示例。 它创建一个基于相对URI的绝对URI - 您可以始终对绝对URI进行硬编码,而不是以这种方式进行。

<?php
  /* Redirect to a different page in the current directory that was requested */
  $host  = $_SERVER['HTTP_HOST'];
  $uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/');
  $extra = 'mypage.php';
  header("Location: http://$host$uri/$extra");
  exit;
?>

尝试在AJAX调用中使用完整的网址。

代替:

    url: "includes/process/processAdminLogin.php",

尝试:

    url: "http://www.mysite.com/includes/process/processAdminLogin.php",
链接地址: http://www.djcxy.com/p/12461.html

上一篇: PHP not redirecting when working with Jquery post

下一篇: PHP AJAX 12017 Error when calling Header(Location:)