我正在尝试创建一个显示任务列表的页面,并允许用户通过选中复选框来更新任务状态。
当我在浏览器上运行页面并单击复选框时,出现 Javascript 异常“
Uncaught ReferenceError: Ajax is not defined (anonymous function)2:96 onclick
这是我的 _task.html.erb 文件中的代码:
<%= check_box_tag "id", "id", task.done,
:onclick => remote_function(
:update => "task",
:url => { :action => :update },
:with => "'done=true'",
:complete => "alert('hi')" ) %>
为什么我会收到此Ajax未定义异常?
我重新安装了rails jquery,确保javascripts文件夹中有rails.js和jquery.js,并确认它们正在加载到HTML上,如下所示:
<script src="/javascripts/jquery.js?1303396383" type="text/javascript"></script>
<script src="/javascripts/rails.js?1303562965" type="text/javascript"></script>
<script src="/javascripts/application.js?1301606933" type="text/javascript"></script>
<script src="/javascripts/jquery.purr.js?1302145859" type="text/javascript"></script>
<script src="/javascripts/best_in_place.js?1302150372" type="text/javascript"></script>
有人发表评论说,大写A的“Ajax”是原型(prototype)函数而不是rails函数。我的应用程序是否以某种方式配置为尝试使用 Prototype 而不是 Rails?我需要更改文件来解决此问题吗?
我刚刚尝试更改 config/application.rb 并取消注释此行:
config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
似乎也不起作用。有什么想法吗?
非常感谢您的帮助。
最佳答案
remote_function
,像大多数 RJS 一样,uses Prototype directly并且不属于 UJS 概念的一部分。 Prototype 帮助程序始终在 Rails 应用程序中可用(直到 Rails 3.1),但它们生成的 JavaScript 仅限于 Prototype,除非您还使用 Prototype JavaScript 库,否则它们将无法工作。
在您的示例中,您使用的是 jQuery 而不是 Prototype。如果您想使用 jQuery,您应该写出预期的 JavaScript 或编写您自己的 remote_function
帮助程序。
关于jquery - "Ajax is not found"异常 - Rails 是否错误地默认为 Prototype?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5739431/