在Ruby on Rails中从RJS响应创建新的XMLHttpRequest的正确方法是什么?

时间:2010-04-01 13:38:59

标签: javascript ruby-on-rails ajax prototypejs rjs

我正试图接近解决上一个问题的解决方案。

我想尝试的方案如下:

  1. 用户向RoR控制器请求操作。
  2. Action进行一些数据库查询,进行一些计算,设置一些会话变量并返回一些RJS代码作为响应。这段代码也可以
    • 更新进度条并发出另一个ajax请求。
    • 如果所有处理完成,则显示最终结果(例如图表grahic)
  3. 浏览器评估RJS的javascript表示。它可能会产生另一个(递归?是否允许递归?)请求,或只显示用户的结果。
  4. 所以,这次我的问题是:如何正确地将XMLHttpRequest调用嵌入到rjs代码中?

    我想知道的一些事情是:

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

    有没有人曾经在Rails或其他框架上做过类似的事情?

    我的想法是否理智?

1 个答案:

答案 0 :(得分: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

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

这样,一旦“事物”完成,该函数就会停止被调用。熟悉客户端和服务器部件的责任最初可能令人生畏,但从长远来看,通过允许您开发更具动态性和交互性的Web应用程序,我们将获得回报。