我有一个用jquery提交请求的表单
$("form input[type=submit]").live("click", function(event){
event.preventDefault();
//$(this).attr("disabled", "true");
var postdata = $(this).parents("form").serialize();
//console.log(data);
$.ajax({
type: "POST",
url: "../inc/process.inc.php",
data: postdata
});
});
这会导致用户在单击提交按钮时不被重定向到action="inc/process.inc.php" method="post"
。
process.in.php
$host = $_SERVER["HTTP_HOST"];
$actions = array(
'user_login' => array(
'object' => 'Intro',
'method' => 'processLoginForm',
'header' => 'Location: http://'.$host.'/homepage.php'
)
);
/*
* Make sure the anti-CSRF token was passed and that the
* requested action exists in the lookup array
*/
if ( isset($actions[$_POST['action']]) )
{
$use_array = $actions[$_POST['action']];
$obj = new $use_array['object']($dbo);
if ( true === $msg=$obj->$use_array['method']() )
{
header($use_array['header']);
exit;
}
else
{
// If an error occured, output it and end execution
die ( $msg );
}
}
else
{
// Redirect to the main index if the token/action is invalid
header("http://" . $host);
exit;
}
当我的方法return true
时,这会导致用户被重定向到
Location: http://'.$host.'/homepage.php
,
但firebug
给了我
POST http://192.168.1.133/homepage.php
并在firebug中返回页面内容,然后返回
GET http://192.168.1.133/homepage.php
空白回复
答案 0 :(得分:1)
在最后的其他情况下,请尝试使用header("Location: http://" . $host);
关于您的问题,您执行ajax请求,并期望重定向整个浏览器。阿贾克斯就像这样工作。
如果您执行ajax请求,那么只有该请求才会获得重定向,而不是父页面/窗口,甚至是可选的。
您应该返回一个脚本标记<script>window.location='the new location'</script>
或者不要通过ajax提交,并且这些内容会以“旧学校”的方式流动,以便浏览器选择您要发送的标题:)
答案 1 :(得分:1)
标题将无法按照您期望的方式运行。 header指令将重定向XML HTTP Request对象,而不是浏览器。
你需要即兴发挥。按照以下方式做点什么:
$.ajax({
type: "POST",
url: "../inc/process.inc.php",
data: postdata,
dataType: "json",
success: function (data) {
if (data.errorMessage) {
alert(data.errorMessage);
}
if (data.redirectTo) {
window.location = data.redirectTo;
}
}
});
在你的PHP代码中:
// replace the following line:
// header($use_array['header']);
// exit;
// with
echo json_encode(array(
"redirectTo" => $use_array["header"]
));
exit;
// replace the following line:
// die( $msg );
// with
echo json_encode(array(
"errorMessage" => $msg
));
exit;
// and so on