我正在尝试创建一个显示任务列表的页面,并允许用户通过选中复选框来更新任务状态。
当我在浏览器上运行页面并单击复选框时,我会收到Javascript异常“
未捕获的ReferenceError:Ajax不是 定义(匿名函数)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”是原型函数,而不是rails函数。我的应用程序是否以某种方式配置为尝试使用Prototype而不是rails?我需要更改文件才能修复此问题吗?
我刚尝试更改config / application.rb并取消注释这一行:
config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
似乎也没有用。有什么想法吗?
非常感谢你的帮助。
答案 0 :(得分:2)
remote_function
,与大多数RJS一样,uses Prototype directly并不是UJS概念的一部分。 Prototype助手总是在Rails应用程序中可用(直到Rails 3.1),但它们生成的JavaScript只是Prototype,除非你还使用Prototype JavaScript库,否则它们不会工作。
在您的示例中,您使用的是jQuery而不是Prototype。如果你想使用jQuery,你应该写出预期的JavaScript或编写自己的remote_function
帮助器。
答案 1 :(得分:0)
因为您没有包含默认的JavaScript库。看看你的布局文件,你需要一个像这样的线(我假设ERB):
<%= javascript_include_tag :defaults %>
确保public/javascripts
和rails.js
中都存在原型或jquery。
你在评论中透露你正在使用jquery - 但你的错误提到了一个资本 - 一个“Ajax”,它是原型名称。
获得正确的rails.js follow these instructions