[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Рзблокировка браузера при синхронном AJAX
Greg1978
Добрый день!
Собственно говоря есть проблема при определённом действии, в которое входит так же синхронный ajax запрос на сервер, блокируется UI браузера. Странно, но в интернете нигде не нарыл его разблокировки в момент запроса к серверу.
Система довольно сложная и асинхронный запрос в принципе можно было бы сделать, но появляется масса проблем с синхронизацией данных от сервера назад в вызывающую функцию, а не в калбек.

Хотелось бы узнать, может кто сталкивался с подобными проблемами, хотя бы ссылки, плиз smile.gif
Можно и средствами ActiveX.



Спустя 57 минут, 21 секунда (4.11.2011 - 16:31) caballero написал(а):
Интересно зачем вообще применять аякс если асинхронно - проблеммы а синхронно - надо блокировать браузер чтобы пользователь не пинал пока аякс отрабатывает?
И зачем разблокиировать то что заблокировано во избежание проблем?

Впрочем, чтобы выяснить чем разблокировать - выясните чем блокируется.



Спустя 7 часов, 25 минут, 26 секунд (4.11.2011 - 23:56) Greg1978 написал(а):
Если Вы внимательно читали мой пост, то наверняка заметили:
1. Это "Система довольно сложная и асинхронный запрос в принципе можно было бы сделать, но появляется масса проблем с синхронизацией данных от сервера назад в вызывающую функцию, а не в калбек. (они практически не разрешимы при разветвлённой архитектуре, так как в JS нет системы синхронизации или хотя бы на крайняк похожей функции "засыпания" как в PHP что бы подождать запрос. Решения с нагрузкой проца выводят его в 100% "полёт" что соответственно не нужно)"
2. >Впрочем, чтобы выяснить чем разблокировать - выясните чем блокируется.
Логика мне подсказывает если блокируется весь UI браузера наверное сама специфика браузера в том что бы при синхронном запросе блокировать UI. По этому у меня и был пост - вопрос чем можно разблокировать UI браузера, вплоть до применения activX.

Спустя 24 минуты, 36 секунд (5.11.2011 - 00:21) caballero написал(а):
1. я имел ввиду на фига вообще юзать аякс (асинхронный - другого не бывает) чтобы потом имитировать синхронность обновления страницы блокируя браузер.

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

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

Спустя 6 минут, 25 секунд (5.11.2011 - 00:27) Greg1978 написал(а):
Сори, может я не правильно выразился:
!Это специфика работы ajax ( в браузере. Он бывает синхронного и асинхронного действия ). При синхронном запросе на сервер посредством ajax блокируется все действия UI браузера на уровне приложения браузера, при асинхронном (почему он и назван асинхронным) свобода действий у пользователя относительно UI браузера остаётся
Сие "(асинхронный - другого не бывает) " есть неосведомлённостью.
>2 чем блокируется браузер выяснить можно, покопавшись в коде который приходит на браузер
Этот код всего лиш использует ajax технологию и не более, и только в этот момент происходит блокировка, нет никаких блокировок со стороны программиста или плагина (хотя я его и не использую в этом случае)

Спустя 4 минуты, 1 секунда (5.11.2011 - 00:31) caballero написал(а):
Цитата
Сие "(асинхронный - другого не бывает) " есть неосведомлённостью.

Не есть
блокировка браузера к аяксу никакого отношение не имеет.
запрос все равно асинхронный - именно поэтому можно выполнять действия типа блокировки браузера.

Вместо блокировки браузера можно например привязать пользователя к стулу чтобы не трогал клаву.


Цитата
Этот код всего лиш использует ajax технологию и не более, и только в этот момент происходит блокировка


Кем? Барабашкой?
Браузер блокирует тот же яваскрипт что и аякс запускает. Точнее блокирует не браузер а страницу.

Спустя 27 секунд (5.11.2011 - 00:32) Greg1978 написал(а):
> А если у вас есть доступ к серверным скриптам то вы можете просто отключить блокировку,
Не много не понял, при чём тут серверные скрипты к клиентскому коду

Спустя 2 минуты, 21 секунда (5.11.2011 - 00:34) caballero написал(а):
Цитата
Не много не понял, при чём тут серверные скрипты к клиентскому коду


Угадайе с одного раза откуда приходит код на клиента.

Спустя 3 минуты, 38 секунд (5.11.2011 - 00:38) Greg1978 написал(а):
Цитата (caballero @ 4.11.2011 - 21:31)
Цитата
Сие "(асинхронный - другого не бывает) " есть неосведомлённостью.

Не есть
блокировка браузера к аяксу никакого отношение не имеет.
запрос все равно асинхронный - именно поэтому можно выполнять действия типа блокировки браузера.

Вместо блокировки браузера можно например привязать пользователя к стулу чтобы не трогал клаву.


Цитата
Этот код всего лиш использует ajax технологию и не более, и только в этот момент происходит блокировка


Кем? Барабашкой?
Браузер блокирует тот же яваскрипт что и аякс запускает. Точнее блокирует не браузер а страницу.

В принципе я Вас понял, нет это понятно что сам процесс является фоновым, но сам ajax может быть синхронным (при котором запускающая его программа ожидает при получении данных от сервера) и асинхронным (когда программа работает далее а запрос уходит в отдельный процесс). Так вот, при синхронном ajax браузер блокирует свой UI, а при асинхронном нет, в первом варианте хочется разблокировки, во втором не реально синхронизировать два процесса так как в JS такого нет.

Спустя 1 минута, 40 секунд (5.11.2011 - 00:40) Greg1978 написал(а):
Цитата (caballero @ 4.11.2011 - 21:34)
Цитата
Не много не понял, при чём тут серверные скрипты к клиентскому коду


Угадайе с одного раза откуда приходит код на клиента.

Угадываю, у меня код не приходит с сервера. Он формируется самим JS rolleyes.gif C сервера идут только данные JSON - RPC

Спустя 3 минуты, 47 секунд (5.11.2011 - 00:43) Greg1978 написал(а):
Браузер блокирует тот же яваскрипт что и аякс запускает. Точнее блокирует не браузер а страницу.
Ну таки да, за это я и спрашиваю как ??? заставить его разблокировать

Спустя 23 секунды (5.11.2011 - 00:44) caballero написал(а):
Еще раз

Аякс не бывает синхронным и ничего не блокирует.

Думаю история такова - жопорукие колхозники грамотеи писавшие код кинулись делать аяксом потому что так больше понтов. Потом оказалось что когда пользователь трогает страницу пока аякс отрабатывает получается бардак. Грамотеи не придумали нечего умнее чтобы не переписываить код, как тупо блокировать доступ к странице пока аякс работает.

Спустя 2 минуты, 3 секунды (5.11.2011 - 00:46) caballero написал(а):
Цитата
Угадываю, у меня код не приходит с сервера. Он формируется самим JS


А JS в браузере откуда взялся? Ветром надуло?

Спустя 58 секунд (5.11.2011 - 00:47) caballero написал(а):
Цитата
за это я и спрашиваю как ??? заставить его разблокировать


Изменить исходный код сайта который лежит на сервере.

Спустя 6 минут, 15 секунд (5.11.2011 - 00:53) Greg1978 написал(а):
Мда,
http://jquery.page2page.ru/index.php5/Ajax...%80%D0%BE%D1%81
http://habrahabr.ru/blogs/javascript/111634/
исходный код на сайте у меня может выражаться в двух строках, а шаблонизацию и формирование могу делать на клиенте!
У меня "толстый клиент", reach client, не уже ли не понятно smile.gif

Спустя 3 минуты, 15 секунд (5.11.2011 - 00:56) caballero написал(а):
Цитата
исходный код на сайте у меня может выражаться в двух строках, а шаблонизацию и формирование могу делать на клиенте!


а я могу целую социальную сеть написать одной строкой

  <script>
window.location = 'vkontakte.ru';
</
script>

Спустя 29 минут, 21 секунда (5.11.2011 - 01:26) Greg1978 написал(а):
мда, ... если хотите по .... думаю не сюда,
а вообще скрипт пишется на JS в браузере, ну по крайней мере в большинстве случаев.
Да, и удачи Вам с шаблонизацией с помощью
 <script>
window.location = 'vkontakte.ru';
</
script>

Спустя 21 минута (5.11.2011 - 01:47) caballero написал(а):
Цитата
а вообще скрипт пишется на JS в браузере

скрипт пишется в текстовом редакторе загружается с сервера а выполняется в браузере.

оттуда же с сервера загружается и все остальное включая некие шаблоны
это не я придумал - так уж устроен интернет

Спустя 3 минуты, 43 секунды (5.11.2011 - 01:50) Greg1978 написал(а):
Цитата (caballero @ 4.11.2011 - 22:47)
Цитата
а вообще скрипт пишется на JS в браузере

скрипт пишется в редакторе а загружается с сервера а выполняется в браузере.

оттуда же с сервера загружается и все остальное включая некие шаблоны
это не я придумал - так уж устроен интернет

Может быть может быть, нужно прощупать фреймы по поводу блокировки, а вообще попробую завтра чистым ajax с JS? если да, то глубочайшие извиниения к Вам caballero smile.gif

Спустя 2 минуты, 6 секунд (5.11.2011 - 01:52) Greg1978 написал(а):
но что то мне подсказывает что сами браузеры на это настроены
Самое интересное как, я jquery просматривал ничего не увидел блокирующего

Спустя 1 минута, 42 секунды (5.11.2011 - 01:54) caballero написал(а):
самое вероятно обычный DIV по верх остального с z-index в районе 1000

так делают разного рода модальные формы и превьюхи один закрывают все слоем а нужный слой поверху с содержимым

Спустя 1 минута, 7 секунд (5.11.2011 - 01:55) caballero написал(а):
Цитата
но что то мне подсказывает что сами браузеры на это настроены

На что на "это"?
яваскрипт не может управлять браузером.

Спустя 23 секунды (5.11.2011 - 01:56) Greg1978 написал(а):
Цитата (caballero @ 4.11.2011 - 22:54)
самое  вероятно  обычный  DIV  по  верх  остального  с  z-index  в  районе  1000

так  делают  разного  рода  модальные формы  и  превьюхи  один  закрывают  все  слоем  а  нужный  слой поверху  с  содержимым

Да вроде нет, отслеживал и дебажил, нет никакого слоя

Спустя 1 минута, 23 секунды (5.11.2011 - 01:57) killer8080 написал(а):
Цитата (Greg1978 @ 4.11.2011 - 15:34)
Система довольно сложная и асинхронный запрос в принципе можно было бы сделать, но появляется масса проблем с синхронизацией данных от сервера назад в вызывающую функцию, а не в калбек.

А в чем проблема с асинхронными запросами?
Сделать глобальную переменную в качестве флага. Запустил - выставил true, отработал колбек - установил false. При вызове функции аякс запроса, проверять состояние флага, соответственно блокировать новый запрос, до завершения старого.

Спустя 44 секунды (5.11.2011 - 01:58) Greg1978 написал(а):
Цитата (caballero @ 4.11.2011 - 22:55)
Цитата
но что то мне подсказывает что сами браузеры на это настроены

На что на "это"?
яваскрипт не может управлять браузером.

Да нет, как вы не поймёте что ajax запрос делает не JS а сам браузер через свою технологию: IE - ActivX, все остальные xml...

Спустя 2 минуты, 37 секунд (5.11.2011 - 02:00) caballero написал(а):
Цитата
Самое интересное как, я jquery просматривал ничего не увидел блокирующего


firebag или аналог в руки - посмотрите что за елемент бокирует
по его id можно найти где он беретмся
разблокировать вам это правда не поможет но

или кинте ссылку сюда
может кто в яваскрипте спец - поможет найти


Спустя 37 секунд (5.11.2011 - 02:01) Greg1978 написал(а):
Цитата (killer8080 @ 4.11.2011 - 22:57)
Цитата (Greg1978 @ 4.11.2011 - 15:34)
Система довольно сложная и асинхронный запрос в принципе можно было бы сделать, но появляется масса проблем с синхронизацией данных от сервера назад в вызывающую функцию, а не в калбек.

А в чем проблема с асинхронными запросами?
Сделать глобальную переменную в качестве флага. Запустил - выставил true, отработал колбек - установил false. При вызове функции аякс запроса, проверять состояние флага, соответственно блокировать новый запрос, до завершения старого.

И это делал в цикле ожидания, и delay() функция сторонняя для ожидания (ресурсов жрёт не меряно), хрен ... всё равно скрипт "убегает" быстрее чем сам success ернёт данные

Спустя 1 минута, 55 секунд (5.11.2011 - 02:03) caballero написал(а):
Цитата
Да нет, как вы не поймёте что ajax запрос делает не JS а сам браузер через свою технологию: IE - ActivX



При чем тут activex
остальные браузеры activex не поддерживают но у них с аяксом все в порядке

Спустя 14 секунд (5.11.2011 - 02:03) killer8080 написал(а):
caballero
речь идет о синхронном режиме, 3 параметр метода open
var xmlhttp = getXmlHttp()
xmlhttp.open('GET', '/xhr/test.html', false);

Спустя 45 секунд (5.11.2011 - 02:04) Greg1978 написал(а):
Цитата (caballero @ 4.11.2011 - 23:00)
Цитата
Самое интересное как, я jquery просматривал ничего не увидел блокирующего


firebag или аналог в руки - посмотрите что за елемент бокирует
по его id можно найти где он беретмся
разблокировать вам это правда не поможет но

или кинте ссылку сюда
может кто в яваскрипте спец - поможет найти

прикол в том что при дебажинге, проходит вери гуд, так как я после нажатия уже получаю свои данные, в том то и прикол (успевает в переменную передать данные), если сам скрипт отслеживаю убегает раз в 100 быстреею Фикус эти данные перехватить вот ситуэйшен, конечно не в контексте калбека

Спустя 1 минута, 22 секунды (5.11.2011 - 02:05) killer8080 написал(а):
Greg1978
а что конкретно вы делаете аяксом, можно в двух словах?

Спустя 1 минута (5.11.2011 - 02:06) caballero написал(а):
Цитата
речь идет о синхронном режиме, 3 параметр метода open


возможно
но сути дела не меняет
без правки серверного кода обойтись не получится

Спустя 3 минуты, 21 секунда (5.11.2011 - 02:10) killer8080 написал(а):
Цитата (caballero @ 5.11.2011 - 02:06)
возможно
но сути дела не меняет
без правки серверного кода обойтись не получится

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

Спустя 6 минут (5.11.2011 - 02:16) Greg1978 написал(а):
Цитата (killer8080 @ 4.11.2011 - 23:05)
Greg1978
а что конкретно вы делаете аяксом, можно в двух словах?

есть WYSIWYG редактор, в фоновом процессе происходит авто сохранение (на сервер запрос) вот при этом (когда чел пишет в редакторе) подвисает UI, это понятно что можно перевести динамически в этот момент на асинхронный режим, но! вопрос как можно сварганить архитектуру с нормальным последовательным алгоритмом без этих долбаных калбеков, не ужели нет таких фишек. Я понимаю что есть очереди, но опять же всё это на калбеках.
Архитектура линейна как вперёд так и назад в функциях.



Впринципе я перерыл туеву кучу материала по этому делу JS не способен на это, лучше динамически переводить запросы, хотя это логично, но опять же хочется как в обычном приложении к ОС ... smile.gif

Спустя 6 минут, 39 секунд (5.11.2011 - 02:22) killer8080 написал(а):
Greg1978
Не вижу тут проблем с асинхронным режимом. Если нужно строгая очередность отправки, значит и использовать очередь. В синхронном режиме продолжить работу до ответа сервера, браузер никак не сможет, и какой смысл в этом?

Спустя 7 минут, 17 секунд (5.11.2011 - 02:30) Greg1978 написал(а):
Цитата (killer8080 @ 4.11.2011 - 23:22)
Greg1978
В синхронном режиме продолжить работу до ответа сервера, браузер никак не сможет, и какой смысл в этом?

Не не не, может я не правильно объяснил, сори. Человек набирает текст, например в течении 10 секунд, его так сказать параметры набора 100 символов в минуту или больше, вот в промежуток , когда происходит запрос на сервер чел набирает символы!, ясное дело что уже отправилось но! символы набираемые в этот момент редактором не принялись и не напечатались. То есть заблокировался весь UI браузера.

Спустя 6 минут, 27 секунд (5.11.2011 - 02:36) killer8080 написал(а):
Greg1978
текст передаётся целиком, ил только изменённая часть, с момента предыдущего сохранения?
Если целиком, то тогда вообще нет никаких проблем с асинхронным режимом.

Спустя 6 минут, 25 секунд (5.11.2011 - 02:42) Greg1978 написал(а):
Цитата (killer8080 @ 4.11.2011 - 23:36)
Greg1978
текст передаётся целиком, ил только изменённая часть, с момента предыдущего сохранения?
Если целиком, то тогда вообще нет никаких проблем с асинхронным режимом.

Нет я Вас понял, текст передаётся весь smile.gif , нет ни каких возвратных состояний или .... тому подобное, сейчас я сделал в этом кейсе в асинхронном режиме, у меня более вопрос как бы сделать всю архитектуру на асинхронный режим. Архитектура требует как прямолинейной передачи параметров та и возврата их.
Да, сори, не текст -JSON

Спустя 1 час, 11 минут, 13 секунд (5.11.2011 - 03:54) SitnikovArtur написал(а):
Кажется я понял в чем проблема.

Человек пишет текст. По некому таймауту данные периодически улетают на сервер. В момент отправки данных на сервер, происходит разбор самих данных (или что там делает WYSIWYG, неважно, знаю что это отнимает некоторое время, а если текста много, это довольно долго происходит), компьютер в это время сильно нагружается и невозможно далее писать текст, потому как все ресурсы направлены на разбор текста.

Правильно?

Спустя 6 дней, 23 часа, 14 минут, 54 секунды (12.11.2011 - 03:09) Greg1978 написал(а):
Да отлично и правильно!!!

Спустя 3 минуты, 45 секунд (12.11.2011 - 03:12) Greg1978 написал(а):
Сори я уже проблему решил и думаю её открыть в будущей теме, хрен там асинхрон не разблокирует wysiwyg или это их такая предрасположенность
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.