可能重复:
How to manage a redirect request after a jQuery Ajax call
我有一个使用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次...这实在是效率低下。如果有人能为我提供更好的解决方案 - 请!写出来的样本也会有所帮助。
谢谢!
答案 0 :(得分:5)
由于AJAX发生在“幕后”(可以这么说),你的重定向只会中断对你的javascript处理程序的响应。
您需要返回该网址,并让您的回调将浏览器踢到新位置。
在此注释中,由于您必须将数据返回到前端,因此您需要添加status
或类似变量,以便根据呼叫是否“失败”切换前端行为或不。
为了回应您的解决方案,我强烈建议您不要使用表单提交技术。正如你所说,它效率不高,不漂亮,需要两倍的工作(验证用户2次)。
如果用户成功登录,为什么不使用PHP的内置session handling来设置会话,然后只需在简单的javascript浏览器重定向后检查会话?
javascript重定向就像window.href = "http://mylocation"
一样简单,如果你对PHP的会话知之甚少,你可以使用this class我已经建立了(请忽略它也在管理cookie,这是愚蠢的疏忽)。
答案 1 :(得分:1)
你在哪里刷新输出缓冲区?尝试在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;
?>
答案 2 :(得分:0)
尝试在AJAX调用中使用完整的URL。
而不是:
url: "includes/process/processAdminLogin.php",
尝试:
url: "http://www.mysite.com/includes/process/processAdminLogin.php",