Rails 3.1 ajax:成功处理

时间:2011-07-05 14:53:54

标签: ajax coffeescript ruby-on-rails-3.1

所以我玩CoffeeScript,Rails 3.1所有好东西。我有一个资源,包含所有常用路由索引,显示,创建,编辑,更新,销毁。

索引视图的表单使用:remote => true,如下所示:

<%= form_for @todo, :remote => true do |f| %>
    <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %> 

在创建控制器中,我有以下内容:

def create
    @todo = Todo.new(params[:todo])

    respond_to do |format|
      if @todo.save
        format.html { redirect_to @todo, notice: 'Todo was successfully created.' }
        format.json { render json: @todo, status: :created, location: @todo }
        format.js {render json: @todo }
      else
        format.html { render action: "new" }
        format.json { render json: @todo.errors, status: :unprocessable_entity }
      end
    end
  end

我试图不使用.js.erb视图,因为我宁愿处理返回的JSON,并且所有花哨的附加到待办事项列表等等。 (这对我来说感觉更干净。)

在我的todos.js.coffee中,我使用了以下内容:

$(document).ready ->
    $("#new_todo")
      .bind "ajax:success", (event, data) ->
        alert("Ajax SUCCESS!!!")

(是的,只是打开一个警告框不起作用)我尝试加载,但只是无法触发此事件。请求确实成功完成,并添加了新的待办事项。

任何有关此的帮助将不胜感激。感谢

2 个答案:

答案 0 :(得分:8)

开始倒过rails.js并想知道是否有任何ajax:回调被提升。

原来他们很好的发送和错误......挂起......错误?怎么会这样?新todo的创建成功发生,响应是我期望的JSON。但是在逐步执行回调代码时,我注意到Invalid label错误。

快速谷歌稍后将我带到这篇文章http://blog.seqmedia.com/?p=484

原来JSON作为字符串返回,Firbug得到了并正确解析它以便我可以检查响应。但是rails.js和js一般都不知道如何处理字符串并抛出上述错误(我可能会默默地说)。

解决方案在respond_to

format.js {render json: @todo, content_type: 'text/json' }

有点感谢Trevor Burnham(就像BTW一书)的帮助和来自sequence media的Amy,他的博客帖子最终给了我解决方案。

答案 1 :(得分:-1)

  1. 什么是#new_todo?是否存在具有该ID的元素?验证代码中的$('#new_todo').length > 0,以及将事件处理程序绑定到的正确元素。
  2. 什么是ajax:success? jQuery API定义了一个ajaxSuccess事件(请参阅Ajax Events docs),但我以前从未见过带冒号的版本。