自动刷新<div>而无需重新加载整个页面

dp.*_*rlo 10 ajax ruby-on-rails ruby-on-rails-3

我正在尝试更新"mydiv"的内容而不刷新整个索引页面.@mydata由mycontroller提供.我需要每n秒重新计算一次并将其传递给"mydiv"

使用"link_to"它有效!

index.html.erb

<%=
    link_to('refresh', '/mycontroller/index', :remote => true)
%>

<div id="mydiv">
    <%=
        @mydata
    %>
</div>
Run Code Online (Sandbox Code Playgroud)

index.js.erb的

$('#mydiv').html('<%= escape_javascript(@mydata) %>')
Run Code Online (Sandbox Code Playgroud)

现在我需要每隔n秒自动刷新"mydiv"的内容(所以不要点击链接).我尝试过以下解决方案:

但没有运气.

在我的application.js中我写了这个:

function executeQuery() {
  $.ajax({
    //url: '/index',
    success: function(data) {
      $('#mydiv').html(data)
    }
  });
  setTimeout(executeQuery, 500);
}

$(document).ready(function() {
  setTimeout(executeQuery, 500);
});
Run Code Online (Sandbox Code Playgroud)

对于谁面临同样的问题,我通过更换来解决它

$('#mydiv').html(data)
Run Code Online (Sandbox Code Playgroud)

$('#mydiv').load('/mycontroller/index #mydiv')
Run Code Online (Sandbox Code Playgroud)

小智 0

在操作中将布局设置为 false 并仅传递相关内容,而不是整个页面

def action1
   <your code here>
end
def action2
   <your code here>
   render :layout => false
end
Run Code Online (Sandbox Code Playgroud)

您的 action2 视图应该包含仅与 #mydiv 相关的内容。

更好的解决方案是使用单个操作并根据请求类型更改渲染选项。(Ajax 或非 Ajax)