0

我正试图更接近我之前问题的问题的解决方案。

我想尝试的方案如下:

  1. 用户向 RoR 控制器请求操作。
  2. Action 进行一些数据库查询,进行一些计算,设置一些会话变量并返回一些 RJS 代码作为响应。此代码可以
    • 更新进度条并发出另一个 ajax 请求。
    • 如果所有处理完成,则显示最终结果(例如图表)
  3. 浏览器评估 RJS 的 javascript 表示。它可能会发出另一个(递归?是否允许递归?)请求,或者只是为用户显示结果。

所以,这次我的问题是:如何正确地将 XMLHttpRequest 调用嵌入到 rjs 代码中?

我想知道的一些事情是:

我应该创建一个新线程以避免堆栈溢出。我应该使用哪些 Rails 助手(如果有)?

以前有人在 Rails 或其他框架上做过类似的事情吗?

我的想法合理吗?

4

1 回答 1

0

这些天你可能会发现 RJS 信息更难获得,我认为不显眼的 JavaScript 在 Rails 社区中获得了更多的关注。你所描述的当然是可能的。我的建议是花一点时间用 jQuery 学习 AJAX。以下是您可能采取的一些步骤:1) 向控制器操作发出 GET 请求,2) 做某事,使用 JSON 响应,3) 在您的成功处理程序代码客户端中,确定是否需要再次调用服务器。

检查 jQuery 上的 Railscast,这里是转录 http://asciicasts.com/episodes/136-jquery

jQuery $.get() 或 $.getJSON http://api.jquery.com/jQuery.get/

Rails 的respond_to块,在这里查看“wants.js”代码 http://www.mckinneystation.com/2009/07/13/rails-respond_to-made-it-too-easy/

您可以使用序列化为 JSON 的 Ruby 对象进行响应: render :json => @thing.to_json

Using$.getJSON()会将响应反序列化为 JavaScript 对象,因此您可以使用点语法轻松访问属性。例如(伪代码): $.getJSON('/url-to-thing.js', function(thing) { if( thing.status != 'done' ) { /* call function again */ } });

这样,一旦“事情”“完成”,函数就会停止调用。开始熟悉客户端和服务器部分的职责可能会让人望而生畏,但从长远来看,通过允许您开发更具动态性和交互性的 Web 应用程序,您将获得回报。

于 2010-04-01T18:08:08.790 回答