我正在尝试使用AJAX / Unobtrusive JavaScript / JQuery刷新div的内容。
如果我创建一个“刷新”链接并为其提供数据远程属性,这很容易做到。
但是,我想使用setInterval函数每2秒刷新一次,而不是使用链接。
此代码应该展示我正在尝试做的事情。放入application.js时它不起作用,因为ERB没有被评估,但希望它能解释我的目标。
setInterval(function(){
$("#scuttlebutt").html("<%= escape_javascript(render 'scuttlebutt') %>");
},2000);
在Rails 3中执行此操作的正确方法是什么?
(我正在使用Rails 3.2.5)
答案 0 :(得分:2)
好的,我知道你要做什么。我以前做过这个,我发现了一个简单的方法。
您希望仍然在控制器中调用远程方法的按钮,该控制器在浏览器中执行一些javascript以刷新该DIV。我知道,我知道,你不想拥有它,但我在这里。我的页面上有一个,但我把它隐藏在一边,以便没有人能找到它,链接这个:
:id => "refresh_button", :style => "position: absolute; left: -9999px" // Rails ERB notation
然后,我将其添加到同一个文件中,我认为该文件是.html.erb文件。
<script type="text/javascript">
function doSomething() {
$('#refresh-button').click();
}
setInterval('doSomething()',2000);
</script>
这将每2秒按一次按钮,调用您的遥控器功能,好像有人每两秒钟点击一次该按钮。我知道,这并不是最干净的方式,但是它可以在紧要关头工作,直到你能为你提供更强大的功能。虽然你可以在技术上使用它。
希望有所帮助。
答案 1 :(得分:2)
我最终将代码放在application.js中:
...看哪
资产/ Javascript角/ application.js中
$(function() {
if ($('#scuttlebutt').length) {
setInterval(function(){
$.getScript(window.location.pathname, function(data, textStatus, jqxhr) {
console.log('Load was performed.');
});
},2000);
}
});
视图/车票/ show.js.erb
$("#scuttlebutt").html(" <%= escape_javascript(render 'scuttlebutt') %>" );
答案 2 :(得分:0)
它声明.js文件不像.erb文件那样被解析。它们按原样传递。