Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 25.03.2014, 19:22
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Сообщение от Erolast
Ну и, click ко всему применим.
Не ко всему, а к DOM элементам
Ответить с цитированием
  #22 (permalink)  
Старый 25.03.2014, 19:26
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,435

Почему бы просто не выполнять никаких действий, пока от сервера не придет ответ?)

Цитата:
Не ко всему, а к DOM элементам
Ну разумеется я имел в виду "Ко всем DOM элементам".

Последний раз редактировалось Erolast, 25.03.2014 в 19:40.
Ответить с цитированием
  #23 (permalink)  
Старый 25.03.2014, 19:33
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,435

Цитата:
Потому как я не знаю как поставить скрипт на паузу, пока выполняется асинхронный запрос(ы)
Никак. Зато можешь выполнять запрос синхронно.

http://learn.javascript.ru/ajax-xmlhttprequest#синхронный-вызов

Но лучше так не делать.
Ответить с цитированием
  #24 (permalink)  
Старый 25.03.2014, 19:53
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Сообщение от Erolast
Почему бы просто не выполнять никаких действий, пока от сервера не придет ответ?)
vs
Сообщение от Erolast
Но лучше так не делать.
PS потому что я не могу сказать скрипту: "СТОЯТЬ! Щас я с сервером перетру одно дело..."
Ответить с цитированием
  #25 (permalink)  
Старый 25.03.2014, 20:25
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,435

Цитата:
PS потому что я не могу сказать скрипту: "СТОЯТЬ! Щас я с сервером перетру одно дело..."
Можешь.
Сообщение от Erolast Посмотреть сообщение
Никак. Зато можешь выполнять запрос синхронно.

http://learn.javascript.ru/ajax-xmlhttprequest#синхронный-вызов
Сообщение от Erolast Посмотреть сообщение
Но лучше так не делать.
Я не пойму, почему ты просто не повесишь на запрос колбэк, который для авторизованых делает то, что нужно, а неавторизованным говорит "Извините, вы не авторизованы."?
Ответить с цитированием
  #26 (permalink)  
Старый 25.03.2014, 20:34
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Hapson, а не пофиг ли, Dom-объект - не Dom? Тебе нужно вызвать метод, вот и проверяй его наличие:
if (isFunction(elem.click)) elem.click();
Ответить с цитированием
  #27 (permalink)  
Старый 25.03.2014, 20:53
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Sweet
а не пофиг ли, Dom-объект - не Dom? Тебе нужно вызвать метод, вот и проверяй его наличие:
Сообщение от nerv_
Кроме того, если ты проверяешь на DOM элемент, вероятно, тебе следует пересмотреть функцию/архитектуру.
Я использовал эту функцию только в тестах и современных браузерах а он собрался кликать за пользователя и сабмитить

Если копнуть еще глубже, то ему не надо вызывать методы клик и сабмит у дум нод, т.к. это та же самая "ошибка в архитектуре"

Сообщение от Hapson
PS потому что я не могу сказать скрипту: "СТОЯТЬ! Щас я с сервером перетру одно дело..."
читай про ООП, изучай код опытных разработчиков... или продолжай топтаться на месте)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 25.03.2014 в 20:55.
Ответить с цитированием
  #28 (permalink)  
Старый 25.03.2014, 21:05
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,435

Если в гугле нет описания проблемы, возникшей в процессе решения стандартной задачи - скорее всего, решение неверное.
Ответить с цитированием
  #29 (permalink)  
Старый 25.03.2014, 21:23
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Сообщение от Erolast
Я не пойму, почему ты просто не повесишь на запрос колбэк, который для авторизованых делает то, что нужно, а неавторизованным говорит "Извините, вы не авторизованы."?
Есть приложение - движок сайта. Есть в нем модуль управления статьями. Есть в нем функционал добавления статьи.
Пользователь пишет статью, в процессе его сеанс заканчивается и он становится неавторизованным юзером. Но он узнает об этом лишь когда его выкинет на страницу авторизации при попытке сохранить статью. Я написал на php функционал хранения данных, которые пользователь вводил, так что катастрофы не будет, если юзер там поэму настрочил - все восстановится. Но вот захотел я сделать так, чтобы авторизация проверялась перед отправкой формы и чтобы подтвердить авторизацию юзер мог тутже - без перебросов на другие страницы.

Ну общие черты понятны думаю... едем дальше.
У движка сайта есть общая javascript библиотека со всякими функциями и даже модулями. В свою очередь, у каждого модуля сайта (в данном случае у модуля управления статьями) тоже есть свой набор скриптов javascript.
У модуля управления статьями есть скриптик, который перехватывает форму добавления статьи и поверхностно ее проверяет перед отправкой на сервер. И тут я решил, что хорошо бы было, если бы перед отправкой формы была бы еще и проверка авторизации.
Я начал писать эту проверку в составе скрипта модуля статей. Но тут я подумал... а ведь потом я буду писать модуль управления комментариями, и там тоже не помешала бы фишка проверки авторизации перед отправкой комментария.
Че делать? Потом писать аналогичную проверку в модуле комментариев? Нет наверно, нахрена одно и тоже переписывать.
Поэтому я решил написать модуль проверки авторизации, который смогут использовать все - любой модуль сайта. Естественно этот модуль вошел в состав общей javascript библиотеки. У модуля есть два открытых метода isLogin() и isLogin.setup(). Один конфигурирует модуль, второй используется a функции перехвата действия пользователя.
То есть скрипт перехватил форму, проверил ее и он делает
return isLogin();
И все. Теперь модуль проверки авторизации решает, что вернуть - true или false. Так как модуль будет делать асинхронные ajax запросы, то он должен сразу что-то вернуть. В данном случае он отменяет действие пользователя и проверяет авторизацию. Не отменить я не могу, так как никто ждать не будет, пока вернется ответ сервера. Поэтому, в модуль авторизации передается объект, по которому кликнул пользователь. Если с объектом все ОК, то модуль просто возвращает false и начинает делать свою работу.
nerv_
Что не так с архитектурой? Есть другие способы? Синхронные запросы не предлагать.
Ответить с цитированием
  #30 (permalink)  
Старый 25.03.2014, 21:28
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Сообщение от Erolast
Если в гугле нет описания проблемы, возникшей в процессе решения стандартной задачи - скорее всего, решение неверное.
Описание моей проблемы: Ajax проверка авторизации перед... ну скажем, отправкой формы.
Ну вот нет такого описания. А вся проблема сводится к другой проблеме: Как остановить скрипт на время выполнения ajax запроса. Ответа два: НИКАК или синхронный запрос. Ни то, ни другое не подходит.
Но вот многие пишут, что при таком раскладе просто отменяют действие юзера, а потом если все ОК эмулируют его программно (click, submit). И это единственное подходящее решение.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery: 'accepts': есть null или не является объектом sitesv Элементы интерфейса 0 08.04.2013 13:44
$('li').get(0) не является объектом? ololosh jQuery 7 25.07.2012 22:47
JQuery как из присланой ajax-ом data сделать DOM объект vuler Общие вопросы Javascript 1 16.04.2012 23:43
Перевод на новую строку JS воспринимает как объект DOM Rig Events/DOM/Window 6 26.12.2011 19:08
Почему jQuery является одновременно функцией и объектом? FINoM jQuery 3 14.02.2011 02:44