如何动态更新erb textarea

时间:2014-01-29 18:14:39

标签: html ruby erb

我想用服务器上文件的内容更新html textarea。问题是文件经常在服务器上更新,我希望用户始终拥有最新版本(确切地说,每100毫秒)。目前正在使用的是

<%= IO.read("file_name") %>

问题是该文件只能读取一次(当用户输入网址时)。另外,由于我的任务的具体细节,刷新页面不是一个选项。

如果重要的话我在使用Ruby 2.0的瘦服务器上使用Sinatra。

2 个答案:

答案 0 :(得分:1)

jQuery setInterval可能会起作用:

setInterval(function(){
    $.get('file_name', function(data){
        $('#div').html(data);
    });
},10000);

虽然我建议不要在setInterval()中编写函数并仅引用它。 E.G。

function readFile() {
    $.get('file_name', function(data){
        $('#div').html(data);
    });
}
setInterval(readFile, 10000);

答案 1 :(得分:1)

我必须学会编写一个Sinatra应用程序并且花费的时间很少。以下是可行的解决方案,我在此代码段中使用ERB模板

my_app.rb(Main sinatra应用程序文件)

require 'sinatra'
require 'json'
get '/' do
  f = File.open("/home/abcd/my_file.txt","r")
  @contents = f.read()
  f.close()
  erb :home
end
get '/read_file' do 
  f = File.open("/home/abcd/my_file.txt","r")
  contents = f.read()
  f.close()
  if request.xhr?
       halt 200, {:file_contents => contents}.to_json
  else 
     erb :read_file
  end
end

views / home.erb

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<div id="data"><%= @contents %></div>
<script type="text/javascript">
   function update_data() {
  $.ajax({
 url: "/read_file",
 accepts: "application/json",
 dataType: "json",
 success: function(data) {
    $("#data").html(data.file_contents);
 }
  });
   }
   $(document).ready(function() {
#Call update_data every 10 seconds
setInterval(update_data, 10000);
})
</script>

感谢您索取代码段。我今天学到了新东西。希望这会有所帮助。