`

rails3 jquery ajax

阅读更多

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

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics