2014-09-07 2 views
0

Предположим, у меня есть сайт Django. На одной странице моя функция в views.py должна выполнить процесс, который может занять 5-15 секунд. Очевидно, я не хочу дожидаться завершения этого процесса до отображения страницы. Проблема в том, что некоторые из Javascript на странице должны использовать результаты долгого процесса. Итак, как я могу выполнить этот длительный процесс (скажем, в потоке python или Deferred) и каким-то образом получить результаты в Javascript после загрузки страницы?выполнить javascript после долгого выполнения задачи Django

+0

Если я правильно понимаю, основная проблема здесь в том, что вы не знаете, когда отправлять запрос ajax, потому что код javascript не знает о завершении процесса? – Tudmotu

+0

Точно. Мне нужен способ для долгого процесса уведомлять Javascript о том, что это сделано, или мне нужно, чтобы Javascript проверял результаты этого процесса и продолжал выполнение только в том случае, когда выполняется длительный процесс. – Marc

ответ

0

У вас есть два разных метода, которые вы можете использовать, в зависимости от браузеров, которые необходимо поддерживать.

Если вам необходимо поддерживать IE, вам нужно использовать метод «Long-Polling». Длительный опрос - это, в основном, отложенный запрос ajax, а это означает, что, как только сервер получит этот запрос, он удерживает его, пока он не сможет дать ему результат операции (или прекратит его при тайм-ауте, а затем клиенту необходимо отправить еще один длинный запрос, запрос опроса). Я лично рассматриваю это как взломать традиционный XHR.

Предпочтительный, но менее поддерживаемый способ - это то, что называется Server Sent Events.
Server Sent Events - это способ, когда сервер уведомляет клиента о событии в любой момент, без необходимости отправки первого запроса клиенту.

Для получения дополнительной информации см. Это extensive answer.

Смежные вопросы