Синхронный запрос MooTools делает 'onRequest' бесполезным? - PullRequest
0 голосов
/ 01 марта 2012

У меня есть пара запросов MooTools XHR, которые я хочу обрабатывать синхронно. Поэтому я использую опцию async: false при создании нового объекта запроса, и это прекрасно работает. Однако я также хочу сообщить пользователю, что браузер будет занят. Для этого я хотел использовать onRequest, поэтому, когда запрос сработает, он покажет сообщение и , а затем займутся делом, после чего с onComplete.

появится еще больше.

Однако то, что я вставил в onRequest, похоже, не выполняется. Запрос запускается сразу же, сразу же блокирует браузер, и когда все готово, появляется сообщение onComplete. Так что же делает опцию onRequest бесполезной в сочетании с async: false? И каким будет «обходной путь»? Я полагаю, что цепочка поможет, но это выглядит грязно по сравнению с простым использованием onRequest.

1 Ответ

2 голосов
/ 01 марта 2012

Это подозрительно - хотя я не уверен, как он будет вести себя в разных браузерах. Что вы используете? Я не испытываю того же самого в FireFox.

MooTools сначала создает объект xhr, а затем запускает событие onRequest:

https://github.com/mootools/mootools-core/blob/master/Source/Request/Request.js#L199-212

это ТОЛЬКО xhr.send(data); - не должно быть никаких обстоятельств, при которых браузер блокирует поток пользовательского интерфейса и не запускает событие (сам обратный вызов является асинхронным).

посмотрите на этот пример на jsfiddle с 3-секундной задержкой ответа и сигналом внизу, который сработает, когда закончится, onRequest сработает правильно:

http://jsfiddle.net/dimitar/gDjJG/

в худшем случае, я полагаю, вы могли бы реорганизовать Request.send для отправки события до того, как оно создаст экземпляр объекта xhr, но я не вижу в этом необходимости. Использование синхронизации ajax является пораженческим и анти-паттерном, хотя потенциально может использоваться при проверке доступности имени пользователя или чего-либо еще.

edit , кажется, ломается в webkit и блокирует поток пользовательского интерфейса для обновлений DOM ДО xhr.send. Похоже, что он обновляет свойство элемента, но QUEUE устанавливает фактическое перекомпонование для дальнейшего использования. Я посмотрю, сможем ли мы изменить mootools для запуска события до установки xhr. хороший улов.

Я подал заявку, посмотрю ее на патч или сделаю, как предложено в worst case бит:

https://github.com/mootools/mootools-core/issues/2317

...