powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / (js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
24 сообщений из 24, страница 1 из 1
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946551
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем.
Есть такая идея привести вэб программирование немного ближе к десктопным приложениям. Для этого соответственно надо стереть границу клиент-сервер и написать интерфейсы для компонентов среды (брал идею из делфей типа TObject, TComponent в их минимальной реализации). Так вот, с интерфейсами и классами всё решилось благополучно и вопрос их создания теперь упирается только в количество времени. А вот проблема с границей клиент-сервер сложнее будет.
Подскажите пожалуйста, как я могу отправить асинхронный запрос на сервер и при этом приостановить работу вызывающей функции до момента получения ответа, но при этом не блокировать весь браузер (то есть синхронный запрос не подойдёт, так как хочу сообщить пользователю, что приложение не зависло, а просто ждёт ответа)?

Сразу прошу сильно не ругать в плане "никому это не надо" и всё такое, просто сама идея экспериментальная, а реализация любительская :)
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946566
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946572
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

такое ощущение, будто последние 4 года ты был где-то в параллельном мире..
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946573
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это конечно не "приостановить работу вызывающей функции до момента получения ответа", но возможно то. что Вам нужно :)
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946590
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечПрограмёр,

такое ощущение, будто последние 4 года ты был где-то в параллельном мире..

О_о ... Что я пропустил?
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946631
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,

объясни пожалуйста что сказать хотел... Просто мне даже сложно подумать, о чём я должен думать читая твои слова.
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946632
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрЯростный МечПрограмёр,

такое ощущение, будто последние 4 года ты был где-то в параллельном мире..

О_о ... Что я пропустил?Даже не 4, а... когда там WebForms появились?
ASP.NET WebForms это и есть "близость к десктопным приложениям". Тыкаешь на кнопку в браузере, а на сервере у тебя onclick произошел.

А еще ты пропустил AJAX — это касаемо асинхронных запросов.
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946659
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyASP.NET WebForms это и есть "близость к десктопным приложениям". Тыкаешь на кнопку в браузере, а на сервере у тебя onclick произошел.только с т.з. разработчика. Иллюзия десктопности, построенная на обычных переходах со страницы на страницу.

а то что хочет ТС - это вроде extjs и т.п., вот там настоящий "десктоп".
http://docs.sencha.com/ext-js/4-1/#!/example
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946681
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyПрограмёрпропущено...


О_о ... Что я пропустил?Даже не 4, а... когда там WebForms появились?
ASP.NET WebForms это и есть "близость к десктопным приложениям". Тыкаешь на кнопку в браузере, а на сервере у тебя onclick произошел.

А еще ты пропустил AJAX — это касаемо асинхронных запросов.

Асинхронные запросы ajax - это я знаю... о них то и идёт речь. просто асинхронный запрос работает по принципу:
1. запрос ушёл.
2. завершение функции... в случае если успеет - выполнение следующей функции
3. При получении ответа вызов callback функции.

То есть если сделать запрос и зациклить приложение, что бы следующая команда не выполнилась, то мы получим простое зависание, так как callback функция просто не будет вызвана, пока не завершиться та функция, из которой был отправлен запрос (не знаю насколько я прав, но уже многие разы пробовал и натыкался именно на такой результат).
как я могу заставить его сначала выполнить callback функцию, а потом перейти далее к выполнению кода?
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946695
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечAntonariyASP.NET WebForms это и есть "близость к десктопным приложениям". Тыкаешь на кнопку в браузере, а на сервере у тебя onclick произошел.только с т.з. разработчика. Иллюзия десктопности, построенная на обычных переходах со страницы на страницу.

а то что хочет ТС - это вроде extjs и т.п., вот там настоящий "десктоп".
http://docs.sencha.com/ext-js/4-1/#!/example

дадада... именно подобный результат и хочется получить )) хм... судя по ответу изобретаю велосипед, но в принципе во-первых, уже начал, а во-вторых, в целях общего образования не повредит...

Так вот, есть ли ответ на мой вопрос, кроме "погуглить" (просто читал то что по ссылке дали, чёто ничего не догнал... надо сидеть и долго разбираться, хотя в принципе это может оказаться не тем, что надо)
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946700
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёркак я могу заставить его сначала выполнить callback функцию, а потом перейти далее к выполнению кода?Вызвать этот код из callback.
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946708
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрТак вот, есть ли ответ на мой вопрос, кроме "погуглить"ответ на вопрос о приостановке действия до возврата данных с сервера - стандартный паттерн js, на котором построен весь аякс (и не только)
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
// некоторые действия
doSome1();

// запрос к серверу
ajax(url, function(response) {
	// действия после получения ответа
	// response - ответ сервера
	doSome2();
});
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946779
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечПрограмёрТак вот, есть ли ответ на мой вопрос, кроме "погуглить"ответ на вопрос о приостановке действия до возврата данных с сервера - стандартный паттерн js, на котором построен весь аякс (и не только)
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
// некоторые действия
doSome1();

// запрос к серверу
ajax(url, function(response) {
	// действия после получения ответа
	// response - ответ сервера
	doSome2();
});


вот от такого я и хочу уйти... Человек не должен задумываться о структуре клиент-сервер... для него это должно быть цельное приложение, а вызов функции на сервере выглядеть так: output = remote_func("ext.php", "increment", [input1[, input2[, ...]]])
ну вот например кусок кода, который должен получиться:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
button1.click = function(e){
 var a=2;
 a = remote_func("ext.php", "increment", [a]); // тут отправляется запрос на сервер, 
 // вызывается функция которая останавливает выполнение button1.click и крутит часики напимер, а когда ответ получен
 // перестаёт крутить часики и возвращает результат выполнения кода на сервере
 alert(a);// должно вывести 3, а не 2.
}



Вот к такому виду кода я и хочу прийти...
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946789
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

даже это обсуждали: http://www.sql.ru/forum/actualthread.aspx?tid=730932

в твоем топике не одной новой идеи ))


---
а конкретно, тебе хочется синхронного аякса. Он есть, но признан идейно и расово неправильным, т.к. зависает весь браузер.
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946799
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрЧеловек не должен задумываться о структуре клиент-сервер...При использовании deffered совершенно не задумываешься над тем асинхронно или нет выполняется метод в цепочке вызовов. deffered гарантирует, что следующий метод вызовется только тогда, когда завершится текущий.
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946859
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечПрограмёр,

даже это обсуждали: http://www.sql.ru/forum/actualthread.aspx?tid=730932

в твоем топике не одной новой идеи ))


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

Вот и надо сделать так что бы не зависал... ну образно говоря что-то, что остановило бы код, но при этом вызывало бы какую-нить функцию-аналог делфевого application.processMessage (если правильно помню оно там так зовётся)...
Лан, буду думать... может чё и надумаю.
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37946972
Фотография 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-функцию. Если запросы по смыслу и действиям на странице совсем никак не пересекаются, с какой стати один должен ожидать другого?
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37947810
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
// некоторые действия
doSome1();

// запрос к серверу
ajax(url, function(response) {
	// действия после получения ответа
	// response - ответ сервера
	doSome2();
});


только немного его покрутил, что бы функция в нужном контексте вызывалась и всё такое))
Всем спасибо, ответ найден (хотя и не тот, который ожидался)
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37947918
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёра я в принципе стремлюсь сделать выполнение кода линейным (что является шагом назад)Использование объекта deffered сделает выполнение кода линейным и это не будет шагом назад :)
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37948293
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПрограмёра я в принципе стремлюсь сделать выполнение кода линейным (что является шагом назад)Использование объекта deffered сделает выполнение кода линейным и это не будет шагом назад :)
Будет... будет...
Вот именно потому, что выполнение линейное... То есть, представим я жму 2 кнопки одну сразу после другой (как уже написали ранее), первая обращается на сервер за вычислением какой нить сложной функции и её построению графически с ответом в виде рисунка, а вторая считает 2+2 (но тоже обращается за этим на сервер)... если сначала выполниться первая, а потом вторая (то есть линейно), то будет некоторая потеря времени... и для 2+2 она будет очень существенной, ведь эта функция будет выполняться не 1 секунду (вместе со всеми запросами, проверками и т.д.), а скажем 5 секунд... то есть в 5 раз дольше :)
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37948362
авторБудет... будет...
да небудет!!!
defferer это псевдолинейность - создаётся объект, который содержит в себе набор функций, которые выполняются одна за одной, только после выполнения предыдущей...
и, если ты работаешь с этим объектом, то для тебя создаётся впечатление, что всё происходит линейно!!!
псевдокод
Код: sql
1.
defferer.next(function).next(function).next(function)


для тех кому влом писать
Код: sql
1.
2.
3.
4.
5.
function {
   function{
       function{}
   }
}


ИМХО очень похоже на синтаксический сахар!
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37948450
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так...авторБудет... будет...
да небудет!!!
defferer это псевдолинейность - создаётся объект, который содержит в себе набор функций, которые выполняются одна за одной, только после выполнения предыдущей...
и, если ты работаешь с этим объектом, то для тебя создаётся впечатление, что всё происходит линейно!!!
псевдокод
Код: sql
1.
defferer.next(function).next(function).next(function)


для тех кому влом писать
Код: sql
1.
2.
3.
4.
5.
function {
   function{
       function{}
   }
}


ИМХО очень похоже на синтаксический сахар!

ну всё... теперь понял о чём речь ))) псевдолинейность запросов на сервер... Это да... но не линейность (и даже не псевдолинейность) кода. а я просил (и в разговоре подразумевал) именно второе.

Так что если я не ошибся в своих суждениях, то данный объект вообще не для меня :)
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37948865
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин... на примере jQuery ajax, т.к. вызов метода jQuery ajax возвращает объект deffered.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
function doOne() {
  return $.ajax(...);
}

function doTwo() {
  return $.ajax(...);
}


Хотите явно гарантировать порядок выполнения:
Код: javascript
1.
doOne().then(doTo());


Не хотите:
Код: javascript
1.
2.
doOne();
doTwo();
...
Рейтинг: 0 / 0
(js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
    #37948919
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAБлин... на примере jQuery ajax, т.к. вызов метода jQuery ajax возвращает объект deffered.
Код: javascript
1.
2.
3.
4.
5.
6.
7.
function doOne() {
  return $.ajax(...);
}

function doTwo() {
  return $.ajax(...);
}


Хотите явно гарантировать порядок выполнения:
Код: javascript
1.
doOne().then(doTo());


Не хотите:
Код: javascript
1.
2.
doOne();
doTwo();



Извини, что заставляю нервничать, просто я правда не могу понять для чего это нужно))
Предложенный мне ранее (и выбранный мной) способ делает то же, что и предлагает этот объект, только без подгрузки jQuery (которую в моём случае вообще подключать не хочется к странице, так как DOM управляется через мою библиотеку).
и тем более, если мне нужно выполнить функцию с использованием локальных переменных, лучше для этого объявить её анонимно в месте вызова, а тогда предложенный тобой код превращается в:
Код: javascript
1.
2.
doSome1();
(function(){return $.ajax(...);})().then(function(){doSome2()});


чем это лучше?
Код: javascript
1.
2.
doSome1();
ajax(url, function(response) {doSome2();});


помоему символов меньше при идентичных условиях :)
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / (js) асинхронный запрос ajax с приостановкой/возобновлением выполнения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]