繁体   English   中英

每n秒刷新一次会导致“堆栈级别太深”

[英]Refreshing a partial every n seconds results in “Stack Level Too Deep”

现在已经停留了一段时间,而且我的JavaScript非常有限! 预定一本书,但现在我被困住了。

我正在尝试使用Jquery和AJAX每3秒刷新一次索引页面上的Partial。

# 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>

但是我所得到的是

stack level too deep

但没有堆栈跟踪。

我的猜测是正在无限调用局部函数,但是我看不到如何或为什么?

有什么建议么? 我在所有这方面都非常新,但学习很快,每本书手里都有一本书,非常感谢你们的支持!

从这个问题的答案中提取出来在Rails应用程序中重新加载部分内容,但对我来说不起作用。

为了完成:

 #/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>

谁能看到翘起或被误解的东西?

非常感谢

我以前使用ajax来执行此操作,因为您需要刷新@ttb

因此,脚本:

$(document).ready(
    function() {
        setInterval(function() {
            $.ajax({
                url: '<%= controller_path(params) %>',
                type: 'GET',
                data: {},
                dataType: 'script',
            });
        }, 3000);
    });

在控制器上:

# agents_controller
def refresh_partial

    @ttb = Class.all

    respond_to do |format|
        format.js
    end
end

使用以下命令在视图文件夹:refresh_partial.js.erb上创建一个新文件:

$('.dynamic').html("<%= escape_javascript('render 'dynamic', ttb: @tb) %>");

这将用partial重写div。

其他技巧,不要在局部上使用@ttb,在调用渲染器时发送ttb,就像我一样,建议修改部分代码。

您的JS代码段是否在“ agents / dynamic”局部内部? 如果是这样,则该函数在某种程度上执行递归操作,部分加载的每次加载都会执行一个附加函数,该加载也会加载相同的部分加载(依此类推...)

您应该将JS提取到周围的页面(“ agents / index”)或改用“ setTimeout()”方法,该方法仅执行一次。

如果JS已经在索引页上,那么部分的重新加载可能还会触发$(document).ready。 您是否尝试过使用FireBug或类似的浏览器插件对其进行调试? 然后,您可以了解为什么它执行得比预期的要频繁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM