|
|
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Добрый день всем. Есть такая идея привести вэб программирование немного ближе к десктопным приложениям. Для этого соответственно надо стереть границу клиент-сервер и написать интерфейсы для компонентов среды (брал идею из делфей типа TObject, TComponent в их минимальной реализации). Так вот, с интерфейсами и классами всё решилось благополучно и вопрос их создания теперь упирается только в количество времени. А вот проблема с границей клиент-сервер сложнее будет. Подскажите пожалуйста, как я могу отправить асинхронный запрос на сервер и при этом приостановить работу вызывающей функции до момента получения ответа, но при этом не блокировать весь браузер (то есть синхронный запрос не подойдёт, так как хочу сообщить пользователю, что приложение не зависло, а просто ждёт ответа)? Сразу прошу сильно не ругать в плане "никому это не надо" и всё такое, просто сама идея экспериментальная, а реализация любительская :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 13:37:44 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 13:44:46 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Програмёр, такое ощущение, будто последние 4 года ты был где-то в параллельном мире.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 13:46:04 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Это конечно не "приостановить работу вызывающей функции до момента получения ответа", но возможно то. что Вам нужно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 13:46:08 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Яростный МечПрограмёр, такое ощущение, будто последние 4 года ты был где-то в параллельном мире.. О_о ... Что я пропустил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 13:52:49 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Яростный Меч, объясни пожалуйста что сказать хотел... Просто мне даже сложно подумать, о чём я должен думать читая твои слова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 14:12:52 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
ПрограмёрЯростный МечПрограмёр, такое ощущение, будто последние 4 года ты был где-то в параллельном мире.. О_о ... Что я пропустил?Даже не 4, а... когда там WebForms появились? ASP.NET WebForms это и есть "близость к десктопным приложениям". Тыкаешь на кнопку в браузере, а на сервере у тебя onclick произошел. А еще ты пропустил AJAX — это касаемо асинхронных запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 14:14:10 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
AntonariyASP.NET WebForms это и есть "близость к десктопным приложениям". Тыкаешь на кнопку в браузере, а на сервере у тебя onclick произошел.только с т.з. разработчика. Иллюзия десктопности, построенная на обычных переходах со страницы на страницу. а то что хочет ТС - это вроде extjs и т.п., вот там настоящий "десктоп". http://docs.sencha.com/ext-js/4-1/#!/example ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 14:24:04 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
AntonariyПрограмёрпропущено... О_о ... Что я пропустил?Даже не 4, а... когда там WebForms появились? ASP.NET WebForms это и есть "близость к десктопным приложениям". Тыкаешь на кнопку в браузере, а на сервере у тебя onclick произошел. А еще ты пропустил AJAX — это касаемо асинхронных запросов. Асинхронные запросы ajax - это я знаю... о них то и идёт речь. просто асинхронный запрос работает по принципу: 1. запрос ушёл. 2. завершение функции... в случае если успеет - выполнение следующей функции 3. При получении ответа вызов callback функции. То есть если сделать запрос и зациклить приложение, что бы следующая команда не выполнилась, то мы получим простое зависание, так как callback функция просто не будет вызвана, пока не завершиться та функция, из которой был отправлен запрос (не знаю насколько я прав, но уже многие разы пробовал и натыкался именно на такой результат). как я могу заставить его сначала выполнить callback функцию, а потом перейти далее к выполнению кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 14:33:19 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Яростный МечAntonariyASP.NET WebForms это и есть "близость к десктопным приложениям". Тыкаешь на кнопку в браузере, а на сервере у тебя onclick произошел.только с т.з. разработчика. Иллюзия десктопности, построенная на обычных переходах со страницы на страницу. а то что хочет ТС - это вроде extjs и т.п., вот там настоящий "десктоп". http://docs.sencha.com/ext-js/4-1/#!/example дадада... именно подобный результат и хочется получить )) хм... судя по ответу изобретаю велосипед, но в принципе во-первых, уже начал, а во-вторых, в целях общего образования не повредит... Так вот, есть ли ответ на мой вопрос, кроме "погуглить" (просто читал то что по ссылке дали, чёто ничего не догнал... надо сидеть и долго разбираться, хотя в принципе это может оказаться не тем, что надо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 14:38:20 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Програмёркак я могу заставить его сначала выполнить callback функцию, а потом перейти далее к выполнению кода?Вызвать этот код из callback. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 14:41:01 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
ПрограмёрТак вот, есть ли ответ на мой вопрос, кроме "погуглить"ответ на вопрос о приостановке действия до возврата данных с сервера - стандартный паттерн js, на котором построен весь аякс (и не только) Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 14:44:24 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Яростный МечПрограмёрТак вот, есть ли ответ на мой вопрос, кроме "погуглить"ответ на вопрос о приостановке действия до возврата данных с сервера - стандартный паттерн js, на котором построен весь аякс (и не только) Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. вот от такого я и хочу уйти... Человек не должен задумываться о структуре клиент-сервер... для него это должно быть цельное приложение, а вызов функции на сервере выглядеть так: output = remote_func("ext.php", "increment", [input1[, input2[, ...]]]) ну вот например кусок кода, который должен получиться: Код: javascript 1. 2. 3. 4. 5. 6. 7. Вот к такому виду кода я и хочу прийти... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 15:20:21 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Програмёр, даже это обсуждали: http://www.sql.ru/forum/actualthread.aspx?tid=730932 в твоем топике не одной новой идеи )) --- а конкретно, тебе хочется синхронного аякса. Он есть, но признан идейно и расово неправильным, т.к. зависает весь браузер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 15:28:35 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
ПрограмёрЧеловек не должен задумываться о структуре клиент-сервер...При использовании deffered совершенно не задумываешься над тем асинхронно или нет выполняется метод в цепочке вызовов. deffered гарантирует, что следующий метод вызовется только тогда, когда завершится текущий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 15:33:00 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Яростный МечПрограмёр, даже это обсуждали: http://www.sql.ru/forum/actualthread.aspx?tid=730932 в твоем топике не одной новой идеи )) --- а конкретно, тебе хочется синхронного аякса. Он есть, но признан идейно и расово неправильным, т.к. зависает весь браузер. Вот и надо сделать так что бы не зависал... ну образно говоря что-то, что остановило бы код, но при этом вызывало бы какую-нить функцию-аналог делфевого application.processMessage (если правильно помню оно там так зовётся)... Лан, буду думать... может чё и надумаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 15:54:10 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Яростный Мечтолько с т.з. разработчика. ПрограмёрЧеловек не должен задумываться о структуре клиент-сервер... для него это должно быть цельное приложение, а вызов функции на сервере выглядеть так: output = remote_func("ext.php", "increment", [input1[, input2[, ...]]])таки "человек" это разработчик :) Програмёр, Ты хочешь странного, но к счастью сама архитектура браузеров не даст тебе это сделать. Исполнение js-кода и обработка user input'а происходят в одном потоке. Любое "ожидание" внутри js-кода означает остановку обработки user input'а, то есть подвисание страницы. Допустим у тебя есть processMessage, что из этого выйдет хорошего? Нажал ты на кнопку, делающую запрос к серверу, и крутишь processMessage, который не подвешивает страницу, и угораздило тебя нажать на еще одну кнопку с запросом и ожиданием. С точки зрения потока возникнет такой стек вызовов: js-функция кнопки1 -> processMessage -> js-функция кнопки2 -> processMessage. Первый запрос уже сто лет как вернулся, но висит в вакууме, ждет, когда же вернется второй запрос, закончится цикл processMessage и что там после него предусмотрено, и управление вернется в вызвавшую его js-функцию. Если запросы по смыслу и действиям на странице совсем никак не пересекаются, с какой стати один должен ожидать другого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2012, 16:37:35 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
AntonariyЯростный Мечтолько с т.з. разработчика. ПрограмёрЧеловек не должен задумываться о структуре клиент-сервер... для него это должно быть цельное приложение, а вызов функции на сервере выглядеть так: output = remote_func("ext.php", "increment", [input1[, input2[, ...]]])таки "человек" это разработчик :) Програмёр, Ты хочешь странного, но к счастью сама архитектура браузеров не даст тебе это сделать. Исполнение js-кода и обработка user input'а происходят в одном потоке. Любое "ожидание" внутри js-кода означает остановку обработки user input'а, то есть подвисание страницы. Допустим у тебя есть processMessage, что из этого выйдет хорошего? Нажал ты на кнопку, делающую запрос к серверу, и крутишь processMessage, который не подвешивает страницу, и угораздило тебя нажать на еще одну кнопку с запросом и ожиданием. С точки зрения потока возникнет такой стек вызовов: js-функция кнопки1 -> processMessage -> js-функция кнопки2 -> processMessage. Первый запрос уже сто лет как вернулся, но висит в вакууме, ждет, когда же вернется второй запрос, закончится цикл processMessage и что там после него предусмотрено, и управление вернется в вызвавшую его js-функцию. Если запросы по смыслу и действиям на странице совсем никак не пересекаются, с какой стати один должен ожидать другого? Ну в принципе система должна была работать немного иначе, но в общем ты прав. В итоге получится, что прикладное программирование практикует многопоточность, что бы одно действие не ожидало выполнение другого, а я в принципе стремлюсь сделать выполнение кода линейным (что является шагом назад). Вообщем, решил воспользоваться вариантом: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. только немного его покрутил, что бы функция в нужном контексте вызывалась и всё такое)) Всем спасибо, ответ найден (хотя и не тот, который ожидался) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2012, 10:31:36 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Програмёра я в принципе стремлюсь сделать выполнение кода линейным (что является шагом назад)Использование объекта deffered сделает выполнение кода линейным и это не будет шагом назад :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2012, 11:30:09 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
skyANAПрограмёра я в принципе стремлюсь сделать выполнение кода линейным (что является шагом назад)Использование объекта deffered сделает выполнение кода линейным и это не будет шагом назад :) Будет... будет... Вот именно потому, что выполнение линейное... То есть, представим я жму 2 кнопки одну сразу после другой (как уже написали ранее), первая обращается на сервер за вычислением какой нить сложной функции и её построению графически с ответом в виде рисунка, а вторая считает 2+2 (но тоже обращается за этим на сервер)... если сначала выполниться первая, а потом вторая (то есть линейно), то будет некоторая потеря времени... и для 2+2 она будет очень существенной, ведь эта функция будет выполняться не 1 секунду (вместе со всеми запросами, проверками и т.д.), а скажем 5 секунд... то есть в 5 раз дольше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2012, 14:17:47 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
авторБудет... будет... да небудет!!! defferer это псевдолинейность - создаётся объект, который содержит в себе набор функций, которые выполняются одна за одной, только после выполнения предыдущей... и, если ты работаешь с этим объектом, то для тебя создаётся впечатление, что всё происходит линейно!!! псевдокод Код: sql 1. для тех кому влом писать Код: sql 1. 2. 3. 4. 5. ИМХО очень похоже на синтаксический сахар! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2012, 14:41:49 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
как-то так...авторБудет... будет... да небудет!!! defferer это псевдолинейность - создаётся объект, который содержит в себе набор функций, которые выполняются одна за одной, только после выполнения предыдущей... и, если ты работаешь с этим объектом, то для тебя создаётся впечатление, что всё происходит линейно!!! псевдокод Код: sql 1. для тех кому влом писать Код: sql 1. 2. 3. 4. 5. ИМХО очень похоже на синтаксический сахар! ну всё... теперь понял о чём речь ))) псевдолинейность запросов на сервер... Это да... но не линейность (и даже не псевдолинейность) кода. а я просил (и в разговоре подразумевал) именно второе. Так что если я не ошибся в своих суждениях, то данный объект вообще не для меня :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2012, 15:11:35 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
Блин... на примере jQuery ajax, т.к. вызов метода jQuery ajax возвращает объект deffered. Код: javascript 1. 2. 3. 4. 5. 6. 7. Хотите явно гарантировать порядок выполнения: Код: javascript 1. Не хотите: Код: javascript 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2012, 18:27:36 |
|
||
|
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
|
|||
|---|---|---|---|
|
#18+
skyANAБлин... на примере jQuery ajax, т.к. вызов метода jQuery ajax возвращает объект deffered. Код: javascript 1. 2. 3. 4. 5. 6. 7. Хотите явно гарантировать порядок выполнения: Код: javascript 1. Не хотите: Код: javascript 1. 2. Извини, что заставляю нервничать, просто я правда не могу понять для чего это нужно)) Предложенный мне ранее (и выбранный мной) способ делает то же, что и предлагает этот объект, только без подгрузки jQuery (которую в моём случае вообще подключать не хочется к странице, так как DOM управляется через мою библиотеку). и тем более, если мне нужно выполнить функцию с использованием локальных переменных, лучше для этого объявить её анонимно в месте вызова, а тогда предложенный тобой код превращается в: Код: javascript 1. 2. чем это лучше? Код: javascript 1. 2. помоему символов меньше при идентичных условиях :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2012, 18:57:14 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=37948293&tid=1449372]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
181ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 547ms |

| 0 / 0 |
