rails3中使用非form提交的ajax操作,这里使用的js框架为jquery
html(views/users/index.html.erb):
<%= link_to "ajax_update", ajax_update_user_path(user), :id => "ajax_update_" + user.id.to_s %> 这里没有使用rails.js里面的:remote
js(views/users/index.html.erb):
<script type="text/javascript"> $(function(){ $('a[id^="ajax_update_"]').click(function(){ $.post(this.href + ".js", null, function(data) { if (data.result == "success") { alert("修改成功"); } }, "json"); return false; }); }); </script>
(1)如果post的dataType设置的是"json",ajax回调的数值格式必须是json的数据格式。否则,回调函数不会被激活。
(2)如果dataType设置的是"script",则返回客户端的是一个可执行的script代码
rails(controllers/users_controller.rb):
def ajax_update @user = User.find_by_id(params[:id]) respond_to do |format| if @user.udpate_attribute(:xxx, "1") format.js { render :json => {:result => "success"}, :layout => false } else format.js { render :json => {:result => "error"}, :layout => false } end end end
返回结果设置成json格式。
在组织成json数据格式的时候,有一点区别。
(1)如果写成这样 :json => "success", ajax 调用后能返回结果,但没有激活ajax success的回调函数
(2)如果写成这样 :json => params[:id], ajax调用后能返回结果,也激活ajax success的回调函数
返回字符串“success”不符合json的格式,没有引起回调。返回params[:id]是一个数值,也不符合json格式,却引起了客户端的回调。很怪异。。。也没有找到具体的原因