Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用AJAX监视ruby控制器传递到查看html的实例变量_Javascript_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

Javascript 如何使用AJAX监视ruby控制器传递到查看html的实例变量

Javascript 如何使用AJAX监视ruby控制器传递到查看html的实例变量,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,嗨,我想创建一个页面,在该页面中,随着变量迭代的进行,它会动态地监视(查看)或呈现控制器中变量的值 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',

嗨,我想创建一个页面,在该页面中,随着变量迭代的进行,它会动态地监视(查看)或呈现控制器中变量的值

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>

非常感谢。

如果我理解正确,您希望每次在服务器上更新HTML文档时都更新其值,对吗?虽然客户端和服务器之间的状态转换通常是由客户端启动的,但是有一些方法可以实现这一点。一,

为了解决这个问题,目前最流行的方法是开放客户端和服务器之间的双向通信管道。当然,对于您的简单示例来说,这可能有些过分(除非您需要客户机和服务器之间的大量实时交互——那么这当然值得一试)——而轮询之类的方式可能更合适(这确实是由客户机发起的),尽管它会生成大量请求

您也可以考虑只打开一个连接。

轮询是一种技术,在这种技术中,客户机以特定的时间间隔调用服务器请求数据,这对您的情况很有用。从您发布的代码来看,您似乎也希望可以通过单击
#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客户机-服务器特性描述应用程序中协作程序的关系。服务器组件向一个或多个客户机提供功能或服务,这些客户机启动对此类服务的请求。()

回答得好,谢谢。它解决了我的问题,我仍然遇到一些错误,但我正在努力。谢谢@nocohvi.Anytime:-)如果您有任何问题,请不要犹豫,直接向我提问!Hi nicohvi如果客户端和服务器之间的状态转换是由rails中的服务器/方法启动的,那么您必须使用WebSocket或服务器发送的事件。这在rails应用程序中并不常见(而且相当复杂,因为它涉及到使用另一台服务器作为websocket服务器,以及使用密钥/数据存储来存储连接的套接字),但是如果您想这样做,请查看以下内容::-)
// 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