25.03.2014, 22:30
|
|
Кандидат Javascript-наук
|
|
Регистрация: 23.07.2013
Сообщений: 122
|
|
Сообщение от nerv_
|
Я использовал эту функцию только в тестах и современных браузерах а он собрался кликать за пользователя и сабмитить
|
Какую функцию? Что не так в программных кликах и сабмитах?
|
|
25.03.2014, 22:46
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
Есть приложение - движок сайта. Есть в нем модуль управления статьями. Есть в нем функционал добавления статьи.
Пользователь пишет статью, в процессе его сеанс заканчивается и он становится неавторизованным юзером. Но он узнает об этом лишь когда его выкинет на страницу авторизации при попытке сохранить статью. Я написал на php функционал хранения данных, которые пользователь вводил, так что катастрофы не будет, если юзер там поэму настрочил - все восстановится. Но вот захотел я сделать так, чтобы авторизация проверялась перед отправкой формы и чтобы подтвердить авторизацию юзер мог тутже - без перебросов на другие страницы.
|
Ну так и сделай функцию, которая запускает один колбек в случае, если пользователь авторизован, и другой - если пользователь не авторизован.
Но слишком обобщать - тоже не хорошо. При чрезмерном повышении уровня теряется гибкость.
Последний раз редактировалось Erolast, 25.03.2014 в 22:51.
|
|
25.03.2014, 22:56
|
|
Кандидат Javascript-наук
|
|
Регистрация: 23.07.2013
Сообщений: 122
|
|
Сообщение от Erolast
|
Ну так и напиши функцию, которая запускает один колбек в случае, если пользователь авторизован, и другой - если пользователь не авторизован.
|
Хорошо, упростим задачу. Я хоть убей не могу понять...
Вот функция которая перехватила форму
function checkForm(){
// проверяет форму...
// нет у нас никаких модулей проверки авторизации, тупо делаем все тут
// нужно сделать ajax запрос...
// запрос асинхронный - никто никого не ждет...
// все нужно что-то вернуть - true или false... что вернуть!?
// если вернуть true - форма уйдет и все проверки авторизации идет лесом
// если false - то нужно потом при удачной проверке или удачном подтверждении (а это еще запросы) сделать submit этой чертовой формы
}
|
|
25.03.2014, 23:15
|
|
Кандидат Javascript-наук
|
|
Регистрация: 23.07.2013
Сообщений: 122
|
|
Смысл в том, что я перехватил клик юзера и нужно что-то решать. Но я не могу ничего решить пока не получу ответ сервера.
|
|
25.03.2014, 23:19
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Ну так делай/не делай субмит программно по приходу ответа от сервера, когда уже будешь знать, авторизован ли пользователь.
|
|
25.03.2014, 23:26
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
<script>
function send_data()
{
//Хорошей идеей было бы оповестить пользователя, что идет проверка авторизации.
//Делаем запрос на сервер, вешаем колбек с соответствующими проверками - если пользователь авторизован, делаем document.getElementById("myform").submit(), не авторизован - выдаем ошибку, открываем окно авторизации.
}
</script>
<form id="myform" action="data_reciever.php">
<textarea></textarea>
<button onclick="send_data()">Отправить</button>
</form>
|
|
25.03.2014, 23:34
|
|
Кандидат Javascript-наук
|
|
Регистрация: 23.07.2013
Сообщений: 122
|
|
Сообщение от Erolast
|
Ну так делай/не делай субмит программно по приходу ответа от сервера, когда уже будешь знать, авторизован ли пользователь.
|
Ну так я так и делаю!
Но только товарищ nerv_ считает это корявой акхитектурой.
Единственным условием для успешного запуска модуля проверки авторизации, является передача ему ссылки на объект, по которому кликнул юзер, будь то кнопка, ссылка, форма... неважно. Главное чтоб это был объект, у которого есть click() или submit();
Так сделано, потому что модуль как бы общий, и использовать его может любой модуль сайта.
Ладно, проблема-то решена уже давно
|
|
25.03.2014, 23:35
|
|
Кандидат Javascript-наук
|
|
Регистрация: 23.07.2013
Сообщений: 122
|
|
Erolast,
Да... если задержка более 500мс, то юзер увидит анимацию и оповещение, что скрипт чего-то там делает... надо обождать. Это тоже все уже есть
|
|
25.03.2014, 23:43
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
Ну так я так и делаю!
|
Судя по твоим сообщениям, ты пытаешься отменять стандартный браузеровский субмит. А этого сделать в твоем случае невозможно, потому-что на момент, когда отменить можно, необходимых данных нету, а потом уже поздно. Поэтому надо вызывать функцию по обычной кнопке, а не по <input type="submit">, функцией отправлять запрос к серверу, вещать на запрос колбек, и только там, если пользователь авторизован, искусственно вызывать субмит формы.
И не надо никуда никаких элементов передавать.
Последний раз редактировалось Erolast, 25.03.2014 в 23:49.
|
|
25.03.2014, 23:54
|
|
Кандидат Javascript-наук
|
|
Регистрация: 23.07.2013
Сообщений: 122
|
|
Сообщение от Erolast
|
Судя по твоем сообщения, ты пытаешься отменять стандартный браузеровский субмит. А этого сделать в твоем случае невозможно, потому-что на момент, когда отменить можно, необходимых данных нету, а потом уже поздно. Поэтому надо вызывать функцию по обычной кнопке, а не по <input type="submit">, функцией отправлять запрос к серверу, вещать на запрос колбек, и только там, если пользователь авторизован, искусственно вызывать субмит формы.
|
Почему невозможно, и зачем какой-то левый инпут?
Является ли объект DOM объектом
Сообщение от Erolast
|
А этого сделать в твоем случае невозможно, потому-что на момент, когда отменить можно, необходимых данных нету, а потом уже поздно
|
Это и решает модуль проверки авторизации.
Если ему передали DOM объект на котором произошел click, то он отменить действие и приступит к работе.
В случае успешной проверки на сервере или при любых ошибках в работе, он программно совершит отмененное действие.
Если юзер потерял авторизацию, то будет выведена форма авторизации.
Если юзер верно введет все, то получить сообщение, типа все ОК пуляй форму.
Если N-ное кол-во раз он неверно укажет логин/пароль, то скрипт отключится и перестанет перехватывать данные с формы авторизации. Ну и юзер уже физически отправится по action, указанный в форме авторизации, а там уже сервер ему что-то скажет
|
|
|
|