Rails UJS - JavaScript未执行

10

这是一个非常奇怪的问题。在我的Rails应用程序中,我正在使用UJS将页面上的一个partial替换为另一个。最近,它停止工作了,所以我开始记录整个过程,以查看它在哪里出错。以下是我发现的:

  • 链接被点击后,Rails控制台告诉我,所有内容都已呈现,包括所有partials,并返回200 OK。
  • 控制器操作中的puts返回正常
  • respond.do块中的puts返回正常
  • js.erb文件中的puts返回正常

这意味着它一直运行到了执行.js.erb文件并在没有错误的情况下评估ruby代码。但是,这里有一个奇怪的地方 - 没有任何JavaScript代码被执行。当我在.js.erb文件中运行alert('hello?')时,它没有执行。

有人遇到过这个问题吗?它似乎非常奇怪,它会运行erb评估但不会运行js。而且在JavaScript控制台中也没有出现任何错误。

记录一下,我已经:清除了缓存,重新启动了浏览器、Rails应用程序,但什么也没改变。

示例代码:

# view
link_to 'example', some_path, :remote => true

# controller
respond_to do |format|
  format.js
end

# .js.erb file
alert('this never shows up');
<% puts 'this shows up in the rails console' %>

非常感谢任何能够为这个奇怪问题提供一点启示的人!


1
抱歉,我会自动忽略以连词开头的句子。 - Dave Newton
你说它最近停止工作了 - 有没有可能是你在页面上添加了一些JS代码干扰了返回结果? - muffinista
如果你正在使用Chrome,你也可以查看浏览器收到的内容:看起来还好吗? - nathanvda
1
是的,我正在控制台中看到它通过XHR传入 - 状态为200 OK,响应显示了.js.erb文件中的所有javascript内容:/(这里是截图 - http://cl.ly/BxmT - 我记录了它的传入)。 - Jeff Escalante
你使用了什么方法来替换内容?你正在使用哪个版本的Rails UJS - 基于Prototype还是基于jQuery? - WTK
显示剩余2条评论
1个回答

10

1
哈哈,你是对的,它会显示在Chrome审查器的网络选项卡中(就像我之前提到的那样,属于XHR)。JavaScript控制台还是空的。不过,这篇文章很棒,我会仔细检查一下,看看是否解决了问题!谢谢~ - Jeff Escalante
在这篇文章中,它说要检查它是否被“作为JS”处理-对我来说,它说正在被处理为JS。因此,我单击了您提供的备用链接,但出现了404错误。 - Jeff Escalante
是的,我也意识到了 :( 但文章底部提供了一种在Firebug中测试渲染JS错误的方法。这可能会让你对发生了什么有一些见解。 - Alex Marchant
请再次阅读文章,它说:“如果有“as JS”这一部分,那么我们就有了一个JavaScript问题(下面会解决这个问题)。”因此您不需要链接页面,只需要阅读文章即可。 - Alex Marchant
非常感谢这里的指导 - 奇怪的是,我打开了火狐浏览器进行测试,它起作用了。然后我重新启动了Chrome,并添加了一些新条目。对于所有新条目都有效,只是之前我测试的这三个特定条目无法正常工作。多么奇怪啊!不管怎样,我认为这已经基本解决了,尽管我将看看能否找出这三个奇怪示例的问题所在。 - Jeff Escalante
根据我的经验,每当出现这种情况时,通常都是JavaScript错误,往往是由内联Ruby引起的。例如,我有类似于以下内容的东西:url:<%= thing_path(@thing)%>,看起来很好,但当然缺少路径名称周围的引号(应该是url:'<%= thing_path(@thing)%>')。 - seymore_strongboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接