Javascript 按钮不存在';t在§上更新Ajax-Rails教程3;12.2.5

Javascript 按钮不存在';t在§上更新Ajax-Rails教程3;12.2.5,javascript,ajax,ruby-on-rails-3,railstutorial.org,Javascript,Ajax,Ruby On Rails 3,Railstutorial.org,我正在阅读Michael Hartl的Rails教程,在§12.2.5中遇到了一个小问题,我们应该用Ajax创建一个工作按钮。我知道代码是正确的(我从书中直接复制了代码并重新键入了三次),我是绿色的。但它实际上不起作用 在本教程的这一部分中,我们将更改一个常规的表单提交按钮以使用Ajax,这样整个页面就不会“刷新”(实际上,重定向到同一页面),而只更新按钮和相应的侧栏项。问题是按钮不会像我预期的那样在点击时自动重新加载。它会在页面刷新时重新加载。如果我在浏览器中禁用JS,它会恢复到HTML版本,

我正在阅读Michael Hartl的Rails教程,在§12.2.5中遇到了一个小问题,我们应该用Ajax创建一个工作按钮。我知道代码是正确的(我从书中直接复制了代码并重新键入了三次),我是绿色的。但它实际上不起作用

在本教程的这一部分中,我们将更改一个常规的表单提交按钮以使用Ajax,这样整个页面就不会“刷新”(实际上,重定向到同一页面),而只更新按钮和相应的侧栏项。问题是按钮不会像我预期的那样在点击时自动重新加载。它会在页面刷新时重新加载。如果我在浏览器中禁用JS,它会恢复到HTML版本,触发重定向并“刷新”整个页面。如果你想知道的话,我试过刷新页面,我试过Firefox、Safari和Chrome,还有隐姓埋名的Chrome。我已经关闭并重新启动了rails服务器、spork和autotest。我重写了所有的代码,然后复制了这本书的所有代码。仍然被难住了

因此,即使测试是绿色的,我也有一个不完善的工作功能。也许我遗漏了什么,你能帮我找到吗?也许我错过了一个javascreipt相关的gem,一个Ajax gem

守则的有关部分:

关系\u controller.erb:

class RelationshipsController < ApplicationController
  before_filter :authenticate

  def create
@user = User.find(params[:relationship][:followed_id])
current_user.follow!(@user)
respond_to do |format|
  format.html { redirect_to @user }
  format.js
end
_follow.html.erb:

<%= form_for(current_user.relationships.find_by_followed_id(@user),
         :html => { :method => :delete },
         :remote => true) do |f| %>
@user.id), :remote=>true)do | f |%>

_unfollow.html.erb:

<%= form_for(current_user.relationships.find_by_followed_id(@user),
         :html => { :method => :delete },
         :remote => true) do |f| %>
{:method=>:delete},
:remote=>true)do | f |%>

create.js.erb

$("follow_form").update("<%= escape_javascript(render('users/unfollow')) %>")
$("followers").update('<%= "#{@user.followers.count} followers" %>')
$(“遵循表单”)。更新(“”)
$(“追随者”)。更新(“”)
destroy.js.erb

$("follow_form").update("<%= escape_javascript(render('users/follow')) %>")
$("followers").update('<%= "#{@user.followers.count} followers" %>')
$(“遵循表单”)。更新(“”)
$(“追随者”)。更新(“”)
我还确保application.html.erb中包含这一行

<%= javascript_include_tag :defaults %>

如果您还需要评估其他情况,请询问,我将提供最新信息


TIA

我一直在为同一个问题绞尽脑汁。我还没有一个解决办法,但我想我可以用一些我尝试过的方法把球向前移动

最有可能的线索是这个。为了简化事情,我尝试消除jQuery代码本身。为此,我使用了Safari的Inspect元素/脚本控制台来测试页面上的脚本

我决定选择无害的

$('title').text("Create")
这是Safari控制台更改标题的地方。但是,将它放在我的create.js.erb和destroy.js.erb文件中不起作用(当我单击follow/unfollow按钮时)。我的日志显示正在调用适当的relationships/destroy.js.erb视图,但元素没有刷新(页面也没有重新加载)

这是最后一件要装的东西。我的控制器与上面相同。我的表格与这本书相同(但使用的是haml),我已经将haml替换为张贴在hartl的github haml分支上的表格

因此,我假设create.js.erb和destory.js.erb文件正在加载,但由于某种原因没有执行。有人知道下一步要做什么来诊断/解决这个问题吗

谢谢

Dave将application.html.erb文件中的
更改为
,这为我解决了问题

见链接:


I'使用Rails 3.1.1,并且在Rails 3.0教程之后出现了相同的问题。在版本更新中,Rails已经脱离了原型,开始使用jQuery。为了更正旧版本的javascript,我必须更新create/destroy.js.erb


你可以在报纸上读到。它归结为在标记id前面添加一个“#”,并将“.update”call替换为“.html”。

您使用的rails版本是什么?如果是3.1,你必须改变

创建.js.erb以:

$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')
$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')
$(“#follow_form”).html(“”)
$(“#followers”).html(“”)
并将.js.erb销毁到:

$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')
$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')
$(“#follow_form”).html(“”)
$(“#followers”).html(“”)
(注意额外的#)
在本教程的最后一章,更改为rails 3.1的注意事项,我最近在rails 4中遇到了这个问题

运行Web服务器,单击follow/unfollow,然后返回Web服务器日志

查找错误

我有一个渲染错误ID为零

因为我在代码末尾更新了relationships_controller.erb中的变量@user,但在我定义它的第一行没有更新

def创建 user=user.find(参数[:后跟\u id]) 当前用户。跟随(用户) 回应待办事项|格式| format.html{将_重定向到@user} format.js 结束 结束

固定

def创建 @user=user.find(参数[:后跟\u id]) 当前用户。跟随(@user) 回应待办事项|格式| format.html{将_重定向到@user} format.js 结束 结束

destroy也一样-所以用@user更新user的所有实例


干杯

使用firebug(与firefox一起使用)或chrome附带的开发者工具来更好地了解正在发生的事情。例如,如果你在mac上使用chrome,点击command-option-i打开开发者工具。单击“控制台”选项卡,然后尝试单击激发ajax的内容。如果有js错误,您将在此处看到它们。在过去,我发现我的ajax请求没有正确格式化,导致js抛出错误。我在寻找rails中的问题,但问题实际上是ajax响应中的问题,浏览器正在捕获它,而不是rails(因此它没有出现在我的日志中)Humbledaisy,你能解决它吗?我在这里也有同样的问题——从Rails返回的结果(我使用http嗅探器确认)不会触发更改,但是如果您将代码粘贴到调试器上,它就会工作。我很困惑。