javascript - 如何使用 AJAX 监控 ruby​​ Controller 传递的实例变量以查看 html

标签 javascript jquery ruby-on-rails ajax

您好,我想创建一个页面,随着变量的迭代,它会在 Controller 内动态监视(查看)或呈现变量的值。

view.html.erb

<a id='get_value' class="btn">Run</a>
<ul id="value_variable_from_controller"><ul>

<script>
var getTheValue=function(){
      $.ajax({
        type:'GET',
        url:'/run/results',
        success:function(data,status){
        <!--how to dynamically UPDATE the value_variable_from_controller?-->
        alert("Successfully");
        }
      });
    }
    $(document).on("click","#get_value",getTheValue);
</script>

这是我的 Controller ,我在其中迭代 x 的值,

结果.rb

x=0
5.times do 
 x++
 sleep(1)
 #HOW TO RETURN THE VALUE OF VAR X EVERY UPDATE?
 #render :json => x, :status => :ok #do i need to have a loop in js?
end

非常感谢。

最佳答案

如果我理解正确的话,您希望每次在服务器上更新 HTML 文档时都更新该值,对吗?尽管客户端和服务器之间的状态转换通常由客户端发起,但有多种方法可以实现此目的。 1

为了解决这个问题,websockets目前最流行的方法 - 基本上在客户端和服务器之间打开双向通信管道。当然,对于您的简单示例,这可能有点过头了(除非您需要客户端和服务器之间进行大量实时交互 - 那么它肯定值得一看) - 并且像轮询这样的东西可能更合适(这确实是发起的)由客户端),尽管它会产生大量的请求。

您也可以考虑long polling仅打开一个连接。

轮询是一种客户端以一定的时间间隔调用服务器请求数据的技术,这适合您的情况。从您发布的代码来看,您似乎还希望能够通过单击 #get_value 链接来获取值,该链接可以使用与长轮询服务相同的方法。这是一个例子:

// in your view/javascript
$(document).ready(function() {
  function getValue(trigger) { 
    $.ajax({
      type: 'GET',
      url: '/run/results/',
      success: function(data, status) {
        $('#value_variable_from_controller').text(data.x);
        if(trigger) { 
          setTimeout(getValue(true), 1000); }
      }
    )} // end AJAX
  } // end getValue

  // binding the action to your link as well
  $('#get_value').on('click', function(event) {
    event.preventDefault();
    getValue(false);
  });
  // start the polling
  getValue(true);
}); 

# in your controller
 @x = 0 # initial value
def results
  @x++ # increment every time this action is called
  render @x.to_json
end

通过这种方式,客户端初始化数据流,服务器改变状态以响应客户端请求 - 这是客户端/服务器架构中的规范。

1 客户端-服务器特性描述了应用程序中协作程序的关系。服务器组件向一个或多个客户端提供功能或服务,客户端发起对此类服务的请求。 (http://en.wikipedia.org/wiki/Client%E2%80%93server_model)

关于javascript - 如何使用 AJAX 监控 ruby​​ Controller 传递的实例变量以查看 html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26250441/

相关文章:

Javascript 到 Actionscript 2.0

javascript - 如何为数组中的 $all 形成 Mongoose 查询

javascript - jQuery 需要更平滑的交叉淡入淡出效果

ruby-on-rails - 我的设计 Controller rspec 中存在 "post create"的问题

ruby-on-rails - 如何显示存储在 s3 上而不存储在硬盘上的图像?

ruby-on-rails - 未定义方法 `each' 为 nil :NilClass - Rails

javascript - 如何去掉动态十六进制值LESS的引号

jquery 动态 <h> 标签在 SEO 检查器站点中无法识别

php - 如何使用ajax在地址栏中显示选定的表格行id

javascript - 通过 ajax 请求某些内容 - 如何停止其他请求,直到该请求完成