函数在firebug中执行POST和GET请求,但没有头重定向

时间:2011-03-31 07:13:46

标签: php html post redirect header

我有一个用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

空白回复

2 个答案:

答案 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