Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Является ли объект DOM объектом (https://javascript.ru/forum/events/46005-yavlyaetsya-li-obekt-dom-obektom.html)

Hapson 25.03.2014 20:22

Цитата:

Сообщение от Erolast
Ну и, click ко всему применим.

Не ко всему, а к DOM элементам

Erolast 25.03.2014 20:26

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

Цитата:

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

Erolast 25.03.2014 20:33

Цитата:

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

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

Но лучше так не делать.

Hapson 25.03.2014 20:53

Цитата:

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

vs
Цитата:

Сообщение от Erolast
Но лучше так не делать.

PS потому что я не могу сказать скрипту: "СТОЯТЬ! Щас я с сервером перетру одно дело..."

Erolast 25.03.2014 21:25

Цитата:

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

Сообщение от Erolast (Сообщение 304239)
Никак. Зато можешь выполнять запрос синхронно.

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

Цитата:

Сообщение от Erolast (Сообщение 304239)
Но лучше так не делать.

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

Sweet 25.03.2014 21:34

Hapson, а не пофиг ли, Dom-объект - не Dom? Тебе нужно вызвать метод, вот и проверяй его наличие:
if (isFunction(elem.click)) elem.click();

nerv_ 25.03.2014 21:53

Цитата:

Сообщение от Sweet
а не пофиг ли, Dom-объект - не Dom? Тебе нужно вызвать метод, вот и проверяй его наличие:

Цитата:

Сообщение от nerv_
Кроме того, если ты проверяешь на DOM элемент, вероятно, тебе следует пересмотреть функцию/архитектуру.

Я использовал эту функцию только в тестах и современных браузерах :) а он собрался кликать за пользователя и сабмитить :D

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

Цитата:

Сообщение от Hapson
PS потому что я не могу сказать скрипту: "СТОЯТЬ! Щас я с сервером перетру одно дело..."

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

Erolast 25.03.2014 22:05

Если в гугле нет описания проблемы, возникшей в процессе решения стандартной задачи - скорее всего, решение неверное.

Hapson 25.03.2014 22:23

Цитата:

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

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

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

Hapson 25.03.2014 22:28

Цитата:

Сообщение от Erolast
Если в гугле нет описания проблемы, возникшей в процессе решения стандартной задачи - скорее всего, решение неверное.

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


Часовой пояс GMT +3, время: 00:34.