2015-10-28 2 views
-1

Итак, когда нажата кнопка входа в систему, я использую метод POST JQuery для получения данных из login.php, если логин был успешным или нет. Если это не было (пользователь не найден), он корректно отображает сообщение.Перенаправление после запроса JQuery AJAX от PHP

Но когда я хочу перенаправить пользователя (пользователь существует), он распечатывает всю веб-страницу в один DIV.

JQuery после того, как кнопка нажата:

$(function(){ 

$("#login-form").submit(function() { 
    event.preventDefault(); 

    var name = $('#inputName').val(); 
    var password = $('#inputPassword').val(); 

    $.post("login.php", 
    { 
     name: name, 
     password: password 
    }, 
    function(data) 
    { 
     $("#resultDiv").hide().html(data).fadeIn(1000).effect("shake", {direction:"up",times:2, distance:10}, 750); 
    }); 
}); 
}); 

Если Войти не удалось, он отображает. Но когда я хочу, чтобы перенаправить, doesen't работы:

if(!$row) { 
echo '<div class="alert alert-danger" style="margin-top:25px; margin-bottom: 0px; text-align:center;">Invalid <strong>username</strong> or <strong>password</strong>.</div>'; 
} else { 

    $line = mysqli_fetch_assoc($query); 

    $_SESSION['IP'] = $line["IP"]; 
    $_SESSION['ID'] = $line["ID"]; 
    $_SESSION['username'] = $username; 

    header("location:choose.php"); 
} 

Таким образом, когда пользователь входит в систему, как я просто перенаправить его? Не хотите ничего показывать.

+1

Почему бы не перенаправить с помощью 'JavaScript'? 'echo'' true' и проверить, равно ли возвращенное значение 'true', если оно будет перенаправлено. – Script47

+2

Почему бы не удалить ajax полностью? В этом случае это просто усложняет ситуацию. –

+0

Потому что я не хочу, чтобы страница перезагружалась, если логин не был успешным (сообщение отображается JQuery, если это не так). – fidtal

ответ

1

Ваш сценарий входа не будет перенаправлять всю страницу так, как у вас есть, он перенаправляет только запрос AJAX, поэтому имеет смысл, что вся страница попадает в resultDiv.

Ваша функция успеха должна смотреть на данные, возвращенные до того, как они применили данные к resultDiv html().

Я нашел, что это легче сделать ответ входа набор данных JSON, что делает его гораздо легче захватить:

if(data.loggedIn==true) { 
    window.location = data.location; 
} else {} 

Вы также можете сохранить resultDiv ошибок, это просто:

$("#resultDiv").hide().html(data.errorMsg)... 

для стороны PHP:

if(!$row) { 
    echo '{loggedIn:false,errorMsg:"<div class=\"alert alert-danger\" style=\"margin-top:25px; margin-bottom: 0px; text-align:center;\">Invalid <strong>username</strong> or <strong>password</strong>.</div>"}'; 
} else { 

    $line = mysqli_fetch_assoc($query); 

    $_SESSION['IP'] = $line["IP"]; 
    $_SESSION['ID'] = $line["ID"]; 
    $_SESSION['username'] = $username; 

    echo '{loggedIn:true,location:"choose.php"}'; 

} 

Я надеюсь, что это имеет смысл для вас.

+0

Используется JSON, чтобы отправить результат на javascript - теперь работаем. – fidtal

+0

Рад, что я мог помочь! – Alderin

Смежные вопросы