Ruby Sinatra:我可以在一个客户端请求中多次更新视图模板

时间:2012-02-29 04:05:44

标签: ruby sinatra erb

我想这样做:

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

是否可以在客户端看到每次更新时执行此类操作,我已尝试但无法使其正常工作。

1 个答案:

答案 0 :(得分:3)

简而言之:

我认为你对HTTP的运作方式感到困惑。首先,HTTP是stateless。这意味着多个请求对彼此一无所知(这可以通过cookie使用会话来缓解,或者可能是HTTP基本身份验证)。

此外,您无法像正在执行的那样重新发送HTTP正文。一旦发送,就不会再回头了。诸如长轮询延迟发送身体以便他们可以随时发送它的技术,但是一旦他们发送了一些请求就完成了,并且必须启动新的请求。因此,一旦你通过erb渲染了一次,你的请求就完成了。

您尝试实现的目标只能通过AJAX的Javascript或完全独立的整页请求来完成。