我想用服务器上文件的内容更新html textarea。问题是文件经常在服务器上更新,我希望用户始终拥有最新版本(确切地说,每100毫秒)。目前正在使用的是
<%= IO.read("file_name") %>
问题是该文件只能读取一次(当用户输入网址时)。另外,由于我的任务的具体细节,刷新页面不是一个选项。
如果重要的话我在使用Ruby 2.0的瘦服务器上使用Sinatra。
答案 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>
感谢您索取代码段。我今天学到了新东西。希望这会有所帮助。