JavaScript – Button不更新在Ajax – Rails教程3在§12.2.5

我正在通过Michael Hartl的Rails教程,并在§12.2.5中打了一个小小的陷阱,我们应该用Ajax创建一个工作按钮.我知道代码是正确的(我直接从书中复制它并重新设置三次),我是绿色的.但实际上并不奏效

通过本教程的这一部分,我们正在更改一个常规的表单提交按钮来使用Ajax,以便整个页面不会“刷新”(真的,重定向到同一页面),而只是按钮和对应的边栏项目更新.问题是按钮不按照我的期望自动重新加载.它在页面刷新时重新加载.如果我在浏览器中禁用了JS,那么它将恢复到触发重定向并“刷新”整个页面的HTML版本.如果你想知道,我已经尝试刷新页面,我尝试过Firefox,Safari和Chrome以及隐身模式的Chrome.我已经关闭并重新启动了rails服务器,spork和autotest.我已经重写了所有的代码,然后复制了这本书的所有代码.仍然被困

所以即使测试是绿色的,我有一个不完美的工作功能.也许有一些我失踪的东西,你可以帮我找到它吗?也许我缺少一个javascreipt相关的宝石,一个Ajax宝石…

代码的相关部分:

relationships_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

结束

def destroy
@user = Relationship.find(params[:id]).followed
current_user.unfollow!(@user)
respond_to do |format|
  format.html { redirect_to @user }
  format.js
end
end
end

_follow.html.erb:

<%= form_for(current_user.relationships.
build(:followed_id => @user.id),
:remote => true) do |f| %> <%=
f.hidden_field :followed_id %>
<%= f.submit
“Follow” %> <% end %>

_unfollow.html.erb:

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

<%end%>

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

解决方法

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

create.js.erb:

$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')

和destroy.js.erb:

$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>")
$("#followers").html('<%= "#{@user.followers.count} followers" %>')

(注意额外的#)它在教程的最后一章,改为导轨3.1的注释

相关文章

$.AJAX()方法中的PROCESSDATA参数 在使用jQuery的$.ajax()方...
form表单提交的几种方式 表单提交方式一:直接利用form表单提...
文章浏览阅读1.3k次。AJAX的无刷新机制使得在注册系统中对于...
文章浏览阅读1.2k次。 本文将解释如何使用AJAX和JSON分析器在...
文章浏览阅读2.2k次。/************************** 创建XML...
文章浏览阅读3.7k次。在ajax应用中,通常一个页面要同时发送...