“没有找到Ajax”异常 - Rails是否错误地默认为Prototype?

时间:2011-04-21 04:15:38

标签: jquery ruby-on-rails ruby-on-rails-3

我正在尝试创建一个显示任务列表的页面,并允许用户通过选中复选框来更新任务状态。

当我在浏览器上运行页面并单击复选框时,我会收到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)

似乎也没有用。有什么想法吗?

非常感谢你的帮助。

2 个答案:

答案 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/javascriptsrails.js中都存在原型或jquery。

更新

你在评论中透露你正在使用jquery - 但你的错误提到了一个资本 - 一个“Ajax”,它是原型名称。

获得正确的rails.js follow these instructions