Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: асинхронность ajax запроса
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
На сколько я знаю т.к. js однопоточный, то в браузерах используются очереди. То есть, например, сработало событие click, обработчик этого события стал в очередь, тут же сработало событие focus и обработчик focus стал в очередь вслед за click. Пока обработчик click-а не отработает, обработчик focus-а н вызовется.
С ajax-ом тоже самое, когда вернется результат от сервера, то обработчик complete встанет в очередь.
Но у меня почему-то по-другому. Ставлю alert в обработчеке click, перед alert-ом делаю ajax запрос, в complete которого делаю alert. В итоге имею: идет ajax запрос, далее алерт выводится, через секунду выводится второй алерт из complete.
Почему отрабатывает код из complete в аяксе параллельно основному коду, а не ставится в очередь?
eai
Отправлено: 09 Августа, 2013 - 16:30:51
Частый посетитель
Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009 Откуда: Петроград
Помог: 10 раз(а)
Код в студию
armancho7777777
Отправлено: 09 Августа, 2013 - 16:32:35
Активный участник
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
Pavelbeginner пишет:
Почему отрабатывает код из complete в аяксе параллельно основному коду, а не ставится в очередь?
Слово "асинхронный" Вам не о чём не говорит ?
Pavelbeginner
Отправлено: 09 Августа, 2013 - 16:35:28
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
armancho7777777 пишет:
Слово "асинхронный" Вам не о чём не говорит ?
Асинхронный запрос, но сам js однопоточный, основан на очереди выполнения.
Или я не прав?
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
Pavelbeginner, какой смысл несёт в себе словосочетание "асинхронный запрос" ?
Pavelbeginner пишет:
То есть, например, сработало событие click, обработчик этого события стал в очередь, тут же сработало событие focus и обработчик focus стал в очередь вслед за click. Пока обработчик click-а не отработает, обработчик focus-а н вызовется.
Вы где начитались этих определений ?
Какие очереди? Вы о чём говорите ?
Какое событие произойдёт раньше: взмах руки, или удар по лбу ?
И почему не наоборт ?
mousedown [-> focus (blur)] -> click -> mouseout.
И никаких очередей.
Произошло событие "mousedown", значит ждите события "click" и "mouseout".
Причина -> следствие.
Касательно ajax-а: Вы можете совершить сотню запросов и продолжать дальше что-то выполнять.
И когда, в какой последовательности вернутся ответы, - не известно.
nerv
Отправлено: 09 Августа, 2013 - 17:20:50
Посетитель
Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013 Откуда: Россия
Почему вы не продолжили обсуждение в этой теме? Зачем создавать новую, для аналогичного вопроса?
----- Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Pavelbeginner
Отправлено: 09 Августа, 2013 - 17:58:23
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
armancho7777777 пишет:
Pavelbeginner, какой смысл несёт в себе словосочетание "асинхронный запрос" ?
Pavelbeginner пишет:
То есть, например, сработало событие click, обработчик этого события стал в очередь, тут же сработало событие focus и обработчик focus стал в очередь вслед за click. Пока обработчик click-а не отработает, обработчик focus-а н вызовется.
Вы где начитались этих определений ?
Какие очереди? Вы о чём говорите ?
Какое событие произойдёт раньше: взмах руки, или удар по лбу ?
И почему не наоборт ?
mousedown [-> focus (blur)] -> click -> mouseout.
И никаких очередей.
Произошло событие "mousedown", значит ждите события "click" и "mouseout".
Причина -> следствие.
Касательно ajax-а: Вы можете совершить сотню запросов и продолжать дальше что-то выполнять.
И когда, в какой последовательности вернутся ответы, - не известно.
Читал некогда толстенную книгу по js-у, с носорогом на обложке. Очередь по-моему вполне логичная вещь. Под очередью я понимаю следующее:
Выполняется код, пока он выполняется произошло событие. Обработчик этого события становится в очередь выполнения и, пока не закончится выполняться текущий код, обработчик события не начнет выполняться. Обработчики всех событий становятся в очередь исполнения. (Добавление)
Цитата:
Асинхронные события обрабатываются после возврата из текущего выполняющегося скрипта.
IllusionMH
Отправлено: 09 Августа, 2013 - 18:18:02
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
Pavelbeginner, и какой же код не завершился до этого?
Клик на кнопке ok в алерте завершает функцию(если там позже не стоит цикл вычисления корней чисел до 10^6). После этого сразу выскакивает алерт в колбэке у запроса.
Какая последовательность действий вас не устраивает?
Опишите какая получается, и какая является желаемой?
"Алерт от аякса(отправляется раньше) до алерта от кнопки?"(Отобразить)
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
Pavelbeginner пишет:
Читал некогда толстенную книгу по js-у, с носорогом на обложке.
Не врите.
Если бы читали её, не задавали таких вопросов.
Скорее всего просто пролистали, и то не до конца. (Добавление)
Pavelbeginner пишет:
Выполняется код, пока он выполняется произошло событие. Обработчик этого события становится в очередь выполнения и, пока не закончится выполняться текущий код, обработчик события не начнет выполняться. Обработчики всех событий становятся в очередь исполнения.
И ? В чём вопрос -то ?
Причём тут ajax ?
Вы так и не ответили на мой вопрос...
armancho7777777 пишет:
какой смысл несёт в себе словосочетание "асинхронный запрос" ?
caballero
Отправлено: 10 Августа, 2013 - 09:20:20
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Асинхронный запрос, но сам js однопоточный, основан на очереди выполнения.
Или я не прав?
JS не в вакууме выполняется а в браузере который многопоточный. Поэтому может запускать впаралель много чего, например загрузку изображений.
вообще, строго говоря - аякс не асинхронный, он просто выполняется в фоне.
сам запрос к серверу - синхронный независимо от того аякс там или нет
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
А мне не понравилось вообще упоминание многопоточности.
В контексте процессора, если физически ядро у него одно - нету там никаких потоков, есть многозадачность, как ресурс, которую он распределяет по всем программам что запущены и делают каике-либо расчеты ПО ОЧЕРЕДИ.
В контексте браузера - да пусть оно происходит как угодно, нет там параллельно выполняемых потоков и все.
Все это визуальный мираж.
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
потоки могут и эмулироватся как это всегда было на однопроцесорных системах.
Но в яваскрипте просто нет средств для работы с потоками.
нельзя создать явно Thread и управлять им. Во всяком случае в браузере - просто есть куча костылей которые делают видимость много поточности.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.