我在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&default=http%3A%2F%2Fskullslab.elhu.me%2Fimages%2Fskl_avatar.png" />");
这似乎是我所期待的,但我不知道为什么,页面的内容不会被修改。
我已经被困在这几个小时了,我很确定答案非常简单......但我会感激任何帮助,谢谢!
PS:JQuery正确加载到我的应用程序中,因为当我不尝试使用AJAX时,我可以在点击链接时更新跨度的内容。
答案 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
希望这可以帮助你