функция выполняет запрос POST и GET в firebug, но перенаправление заголовка отсутствует - PullRequest
0 голосов
/ 31 марта 2011

У меня есть форма, которая отправляет запрос с 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 <a href="http://192.168.1.133/homepage.php" rel="nofollow">http://192.168.1.133/homepage.php</a>

и возвращает содержимое страницы в firebug, а затем

GET <a href="http://192.168.1.133/homepage.php" rel="nofollow">http://192.168.1.133/homepage.php</a>

с пустым ответом

Ответы [ 2 ]

1 голос
/ 31 марта 2011

Заголовок не будет работать так, как вы ожидаете.Инструкция заголовка перенаправит объект XML HTTP Request, а не браузер.

EDIT

Вам нужно импровизировать.Сделайте что-то вроде этого:

$.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
1 голос
/ 31 марта 2011

В последнем случае попробуйте использовать header("Location: http://" . $host);

Что касается вашей проблемы, вы выполняете запрос ajax и ожидаете, что весь браузер будет перенаправлен.Ajax не работает так.Если вы выполняете ajax-запрос, то перенаправляется только этот запрос, а не родительская страница / окно, и даже это необязательно.Вы должны либо возвратить тег скрипта <script>window.location='the new location'</script>, либо не отправлять через ajax, и все идет «старой школой», поэтому браузер подберет отправляемый вами заголовок:)

...