如何解决 Rails 中静默失败的 js 问题?

How to troubleshoot silently failing js in Rails?

提问人:Micah Alcorn 提问时间:5/14/2012 最后编辑:Micah Alcorn 更新时间:5/14/2012 访问量:2103

问:

应该注意的是,我不是很熟练使用Firebug,但我没有发现任何解释以下问题的错误。

我有一个包含以下代码的文件:feed.js.erb

var $foos = $('<%= escape_javascript(render(@foos)) %>');
$('#container').append($foos);
$('#pagination_button a').attr('href', '<%= feed_path + '?page=' + @page %>');

第二次进行此 ajax 调用时,它似乎以静默方式失败。我在 Firebug 控制台中看到了相应的响应,但$foos没有更改,因此从未附加。#container

我的 html 页面只包含一个加载指示器,它在第一次调用时成功替换了它。第二个调用是从其他 javascript (Infinite Scroll) 触发的。

如果这很重要,我注意到第一次调用是使用自动生成的时间戳参数进行的。之后,我将替换目标网址,正如您在我的 .#pagination_button a

如何在浏览器中调试它?

更新:我使用 ERB 制作了一个动态变量 ($foos 1...$foos 2),并注意到这也不起作用。因此,即使新的在控制台的响应中可见,我的 javascript 的第一行也没有被评估。$foos@foos

jQuery ruby-on-rails-3.1 firebug unobtrusive-javascript 无限滚动

评论

0赞 Jords 5/14/2012
使用 firebug 脚本面板在其中一行上放置断点怎么样?
0赞 Micah Alcorn 5/14/2012
我找不到一种方法来做到这一点,因为这个脚本在http响应中。它是在html页面已经呈现之后由我的Rails控制器动态创建的。
0赞 aroth 5/14/2012
您不会尝试使用相同的 element-id 将 两次附加到容器中,是吗?
0赞 Micah Alcorn 5/14/2012
是的,在不同的通话中。它在 ajax 成功时附加一次。然后,新的 ajax 请求无法附加它。
0赞 aroth 5/14/2012
如果您在第二次调用时没有修改 ID,那么这就是问题所在。元素 ID 在 DOM 中应该是唯一的,如果您尝试添加两个或多个具有相同 ID 的元素,浏览器将以各种方式失败。因此,您需要在附加的每个元素上使用不同的 id,或者确保在附加第二个元素之前从 DOM 中显式删除第一个元素。这两种方法都应该有效。

答:

3赞 Micah Alcorn 5/14/2012 #1

事实证明,Rails 并没有将我的第二个请求作为 JS 处理。更重要的是,如果 JS 引发异常,它将被转换为纯文本,如此处所述Steve 还演示了如何调试 ajax 代码,有效地回答了我的两个问题。