Ruby Sinatra: могу ли я обновить шаблон представления несколько раз за один запрос клиента - PullRequest
0 голосов
/ 29 февраля 2012

Я хочу сделать это:

get '/test' do
    @dog = 'WOOF'
    erb :test
    sleep(1)
    @dog = 'BOWWOW'
    erb :test
    sleep(1)
    @dog = 'ARF'
    erb :test
  end

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

1 Ответ

3 голосов
/ 29 февраля 2012

Короче говоря: нет .

Я думаю, вы путаете работу HTTP. Во-первых, HTTP без состояния . Это означает, что несколько запросов ничего не знают друг о друге (это смягчается использованием сеансов с помощью файлов cookie или, возможно, базовой аутентификацией HTTP).

Кроме того, вы не можете повторно отправить тело HTTP, как делаете. Как только оно отправлено, пути назад нет. Такие методы, как длительный опрос, задерживают отправку тела, чтобы они могли отправлять его в любое удобное время, но как только они отправили что-то, запрос завершен, и должен быть запущен новый. Таким образом, как только вы визуализировали тело один раз с помощью erb, ваш запрос завершен.

То, что вы пытаетесь достичь, может быть сделано только через Javascript с AJAX или с полностью отдельными запросами на всю страницу.

...