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格式,却引起了客户端的回调。很怪异。。。也没有找到具体的原因