Header('Location: index.php'); не работает как исправить?

Рейтинг: 0Ответов: 2Опубликовано: 30.03.2015

header('Location: index.php'); не работает.
(Отправка всех полей формы на сервер с помощью ajax jQuery).
Как исправить?
Если есть ошибка при заполнении, то нормально работает

alt text
А если успех бывает вот так:

alt text

Как можно сделать нормально? Заранее спасибо!

html код:

<form method="POST" id="form" action="javascript:void(null);">
      Логин
      <input type="text" name="username"/>
      Пароль
      <input type="password" name="password"/>
      <button type="submit" name="submit">Войти</button>
</form>

<div id="results">вывод</div>

js код:

function call() {
    var msg   = $('#form').serialize();
    $.ajax({
        type: 'POST',
        url: 'login.php',
        data: msg,
        success: function(data) {
            $('#result').html(data);
        },
        error:  function(xhr, str){
            alert('Возникла ошибка: ' + xhr.responseCode);
        }
    });
}

php код:

<?php
include 'core/init.php';

if (empty($_POST) === false) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    if (empty($username) === true || empty($password) === true) {
        $errors[] = 'Вы должны ввести имя пользователя и пароль.';
    } else if (user_exists($username) === false) {
        $errors[] = 'Мы не можем найти что имя пользователя. А вы зарегистрировались?';
    } else if (user_active($username) === false) {
        $errors[] = 'Вы еще не активировали свою учетную запись!';
    } else {
        $login = login($username, $password);
        if ($login === false) {
            $errors[] = 'Это сочетание имени пользователя или пароль неверен.';
        } else {
            $_SESSION['user_id'] = $login;
            header('Location: index.php');
            exit();
        }
    }

}
echo output_errors($errors); 
?>

Ответы

▲ 1Принят

Замени

header('Location: index.php');

на

exit("<meta http-equiv='refresh' content='0; url= /index.php'>");
▲ 2
header('Location: /index.php');

Больше ничего не должно кидаться в STDOUT, иначе некоторые браузеры (кхе-осёл-кхе) могут подумать что заголовок ошибочен.

Для лёгкого чтения.