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