Javascript 每n秒刷新一个部分会导致;“堆栈级别太深”;
我已经在这上面呆了一段时间了,我的JavaScript非常有限!我订了一本书,但现在我被卡住了 我正在尝试使用Jquery和AJAX每隔3秒刷新索引页上的一个部分Javascript 每n秒刷新一个部分会导致;“堆栈级别太深”;,javascript,jquery,ruby-on-rails,ajax,ruby-on-rails-3,Javascript,Jquery,Ruby On Rails,Ajax,Ruby On Rails 3,我已经在这上面呆了一段时间了,我的JavaScript非常有限!我订了一本书,但现在我被卡住了 我正在尝试使用Jquery和AJAX每隔3秒刷新索引页上的一个部分 # agents_controller def refresh_partial render :partial => "agents/dynamic" end #the js <script type="text/javascript"> $(document).ready(
# agents_controller
def refresh_partial
render :partial => "agents/dynamic"
end
#the js
<script type="text/javascript">
$(document).ready(
function() {
setInterval(function() {
$('.dynamic').load('/agents/refresh_partial');
}, 3000);
});
</script>
但没有堆栈跟踪
我猜这是在无限地调用部分,但我看不出如何或为什么
有什么建议吗?我对这一切都很陌生,但学得很快,每只手都拿着一本书,非常感谢你们的支持
从这个问题的答案中抽离
但这对我不起作用
完整性:
#/agents/index
<div class="dynamic"><%= render partial: 'dynamic' %></div>
#/agents/_dynamic
<div class="span4">
<table class="table table-striped" >
<% if @ttb.nil? %>
<% else %>
<% @ttb.each_slice(3) do |elem| %>
<tr>
<td><% elem.each_slice(3) do |a,b,c| %></td>
<td><%= a.gsub(/[^0-9A-Za-z]/, '') %></td>
<td><div id="content"><%= b.gsub(/[^0-9A-Za-z]/, '') %></div></td>
<td><%= c.gsub(/[^0-9A-Za-z]/, '').scan(/.{2}|.+/).join(":") %></td>
</tr>
<% end %>
<% end %>
<% end %>
</table>
</div>
#/agents/index
#/代理/动态
有人能看出什么是错误的或被误解的吗
非常感谢您的JS片段是否碰巧在“代理/动态”部分? 如果是这样,函数在某种程度上是在执行递归的,每次加载部分都会执行一个额外的函数,同时加载完全相同的部分(等等…) 您应该将JS提取到周围的页面('agents/index'),或者改用'setTimeout()'方法,该方法只执行一次
如果JS已经在索引页面上,那么重新加载部分也可能会触发$(document).ready。你试过用FireBug或类似的浏览器插件调试它吗?然后,您就可以了解为什么它执行的频率比您预期的要高。我曾经使用ajax来实现这一点,因为您需要刷新@ttb 因此,剧本:
$(document).ready(
function() {
setInterval(function() {
$.ajax({
url: '<%= controller_path(params) %>',
type: 'GET',
data: {},
dataType: 'script',
});
}, 3000);
});
在视图文件夹上创建新文件:使用以下内容刷新_partial.js.erb:
$('.dynamic').html("<%= escape_javascript('render 'dynamic', ttb: @tb) %>");
$('.dynamic').html("粘贴你的部分视图代理/dynamic。它位于问题的底部。你最好使用ID而不是类名。你现在将任何元素与“dynamic”类匹配,这可能会失控。JavaScript位于索引页的标记中,而不是部分。你也试着将它放在application.js和调用它,但没有任何效果。JavaConsole显示它正在向服务器提交请求,但看不到它正在执行的代码。现在将尝试Firebug。感谢Cellent,这开始看起来很重要。出于兴趣,为什么不使用@ttb?现在就尝试!会让您知道。感谢因为@ttb就像视图和部分的全局变量,如果他更改,just向partial发送一个新的。好吧,它现在正在轮询服务器,但呈现一个空白的partial。所以我没有正确地传递它变量。我猜你是否对文件进行了响应?你能调试来自ajax的响应吗?按照toxaq所说的,将类dinamic更改为id.refresh_partial.js.erb?是的
# agents_controller
def refresh_partial
@ttb = Class.all
respond_to do |format|
format.js
end
end
$('.dynamic').html("<%= escape_javascript('render 'dynamic', ttb: @tb) %>");