Javascript 每n秒刷新一个部分会导致;“堆栈级别太深”;

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(

我已经在这上面呆了一段时间了,我的JavaScript非常有限!我订了一本书,但现在我被卡住了

我正在尝试使用Jquery和AJAX每隔3秒刷新索引页上的一个部分

# 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) %>");