Rails + JQuery:无法使用Ajax查询更新span内容

时间:2011-02-16 19:35:31

标签: jquery ruby-on-rails ajax

我在Rails + JQuery生态系统中使用Ajax查询时遇到了一些麻烦。 我想要做的是在点击链接时用AJAX请求的答案更新跨度的内容。

以下是我观点的有趣部分:

<div class="field">
<%= f.label "Avatar (laissez vide pour utiliser votre gravatar)" %><br />
<span id="avatar">
    <%= gravatar_for @user %>
</span><br />   
<%= link_to "Editer votre gravatar", "http://www.gravatar.com/emails", :target => :_blank %><br />
<%= f.file_field :avatar %>
<%= link_to "Supprimer avatar", "/users/new/delete_avatar?id=#{@user.login}", :remote => true, :confirm => "Etes-vous sur?" %>

我的目标是在点击最后一个链接时使用ID“avatar”更新范围。 以下是接收请求的代码:

  def delete_avatar
        user = User.find_by_login(params[:id])
        user.avatar.destroy
        respond_to do |format|
            format.html { redirect_to edit_user_path @user }
            format.js
        end
  end

以下是response_to调用的delete_avatar.rb.js文件:

$("#avatar").html("<%= gravatar_for @user %>");

现在,当我点击链接并使用Firebug的查询分析工具时,我得到的是GET请求,状态代码为304或200,具体取决于内容是否与以前相同,以下内容:

$("#avatar").html("<img alt="foobar" class="gravatar" src="http://gravatar.com/avatar/f3ada405ce890b6f8204094deb12d8a8?size=150&amp;default=http%3A%2F%2Fskullslab.elhu.me%2Fimages%2Fskl_avatar.png" />");

这似乎是我所期待的,但我不知道为什么,页面的内容不会被修改。

我已经被困在这几个小时了,我很确定答案非常简单......但我会感激任何帮助,谢谢!

PS:JQuery正确加载到我的应用程序中,因为当我不尝试使用AJAX时,我可以在点击链接时更新跨度的内容。

1 个答案:

答案 0 :(得分:0)

你需要在rails代码中使用javascript转义你的garatar_for,如下所示:

$("#avatar").html("<%= escape_javascript gravatar_for @user %>");

问题是你的字符串中有qoutes(“),这使得javascript非法。(除非你使用'用于jquery html方法而不是”,但这只是一个糟糕的解决方法)

另外,从rails和jQuery上的RailsCasts观看这个小小的精彩截屏可能是一个好主意。他在那一集中提到了这一点:http://railscasts.com/episodes/136-jquery

希望这可以帮助你