【问题标题】:Updating server-side progress on Rails application更新 Rails 应用程序的服务器端进度
【发布时间】:2010-09-12 07:43:53
【问题描述】:

我想在 Ruby on Rails 应用程序中上传并处理文件。文件上传通常很短,但服务器端处理可能需要一些时间(超过 20 秒),所以我想给用户一些指示 - 比无意义的“处理...”屏幕更好。

我正在尝试在视图中使用以下代码

<%= periodically_call_remote(:url => {:action => 'progress_monitor', :controller => 'files'},
                 :frequency => '5',
                 :update => "setProgress('progressBar','5')"
                 ) %>

:update参数的内容是我想每5秒运行一次的javascript

以下代码在文件控制器中

def progress_monitor
  render :text => 'whatever'
end

progress_monitor 方法最终会以整数形式返回当前进度(完成百分比),并将其传递给“setProgress”JavaScript 代码(将更新屏幕上的元素)

但是,我正在努力从服务器获得正确的响应,然后将其传递给 JavaScript。

任何人都可以帮忙,还是我用错了方法?

对此有一个后续问题,我最初更新了这个问题,但更新的不同之处足以保证一个新问题here

【问题讨论】:

    标签: javascript ruby-on-rails ajax xmlhttprequest


    【解决方案1】:

    periodically_call_remote() 更新div。它不会调用您的 JavaScript 函数。我不是 JavaScript 专家,但要解决您的问题,您应该自己拨打xmlhttp。如果我是你,我会使用原型的 AJAX 请求

    http://www.prototypejs.org/api/ajax/request

    并使用 JavaScript 的 settimeout 或 setinterval 进行定期轮询

    http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

    希望这会有所帮助,因为实际上我也遇到了相同的 prb =)

    【讨论】:

      【解决方案2】:

      :update 选项应该只列出您要更新的 div,而不是您要评估的 Javascript。

      Rails 帮助器仍然非常适合这种情况,无需编写太多自定义 JS。如果您希望在返回时执行 JS,一种简单的方法是呈现 RJS 模板。如果你想用纯 HTML 来做,只需渲染一个视图(或部分,或直接从带有进度条的 HTML 的render 方法返回)并将进度条的 div 放在 :update 选项中periodically_call_remote 方法。

      【讨论】:

        猜你喜欢
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-04
        • 1970-01-01
        • 2018-11-19
        • 1970-01-01
        相关资源
        最近更新 更多