2016-02-21 5 views
1

У меня есть форма для входа на страницу (Home.html), в которой содержится идентификатор электронной почты и пароль. Это проверяется с помощью JavaScript и перенаправляет на другую страницу (login.html)Javascript: window.location перезагружает ту же страницу, на которой написан скрипт

function redirect() { 
    var email = $('#email').val(); 
    var password = $('#password').val(); 
    if(email=='[email protected]' && password=='user') 
    window.location = 'Login.html'; 
    else 
    alert("Wrong credentials"); 
} 


<form onsubmit='redirect()' method='post'> 

Если неправильные учетные данные введены, то отображается окно предупреждения, как и ожидалось, но когда правильные учетные данные вводятся затем home.html перезагружается вместо того, чтобы на переход на Login.html

Я попытался изменить window.location на window.location.href, но это не поможет.

Он работает правильно, если тег формы не используется, а onclick используется в теге кнопки для вызова функции redirect().

+0

Проблема заключается в том, что ваш код ничего не делает для предотвращения действия обычного родного браузера, связанного с отправкой '

'. – Pointy

+0

Аутентификация на стороне клиента бессмысленна. Любой может проверить исходный код и найти пароль. – Oriol

+0

@Oriol Я понимаю, что код на стороне сервера должен использоваться, и эта страница вообще не защищена, но это всего лишь локальный веб-сайт для проекта колледжа. Он не пойдет в Интернет. В любом случае, спасибо за ваши материалы. – Dhaval

ответ

0

Подача формы вызовет новую страницу для загрузки. Это отменит любое задание location, выполненное JS из его события отправки.

Поскольку у вас нет атрибута действия, загружается новая страница с тем же URL-адресом, что и существующая страница.

Вам необходимо отменить поведение по умолчанию для события отправки (т. Е. Отправки формы). Быстрый и грязный способ сделать это, чтобы вернуть ложь от функции представить обработчик события:

<form onsubmit='redirect(); return false;' method='post'> 

Современный код будет связать обработчик событий с помощью JavaScript, вместо того, чтобы использовать внутренние обработчики событий в первую очередь:

<form method='post'> 

и

function redirect(event) { 
    var email = $('#email').val(); 
    var password = $('#password').val(); 
    if(email=='[email protected]' && password=='user') 
    window.location = 'Login.html'; 
    else 
    alert("Wrong credentials"); 
    event.preventDefault(); 
} 

document.querySelector("form").addEventListener("submit", redirect); 

Надежный код будет написан unobtrusively, так что если JavaScript failed (который it will), форма будет отправлена ​​как обычно, а серверный код будет выполнять эту операцию.


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

+0

Большое спасибо Квентину за это объяснение. И ваш ответ действительно сработал для меня. – Dhaval

+0

Я понимаю, что код на стороне сервера должен использоваться, и эта страница вообще не защищена, но это всего лишь локальный веб-сайт для проекта колледжа. – Dhaval

0

<form onsubmit='redirect();return false;' method='post'>

+0

Спасибо. Ваш ответ сработал для меня. – Dhaval

0

форма не будет представлен, если вы return false от метода переадресации, попробуйте return false при возникновении ошибки.

function redirect() { 
    var email = $('#email').val(); 
    var password = $('#password').val(); 
    if(email=='[email protected]' && password=='user') 
    window.location = 'Login.html'; 
    else 
    { 
    alert("Wrong credentials"); 
    return false; 
    } 
} 

И форма изменения в

<form onsubmit='return redirect()' method='post'> 
+0

Возврат false из функции 'require' не будет иметь никакого эффекта. – Quentin

+1

используйте этот ответ и добавьте в свой элемент формы возврат перед функцией: ' ' –

+0

согласился, отредактировал ответ – JagsSparrow

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