一尘不染

Rails 3.1 Ajax:成功处理

ajax

因此,我正在使用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!!!")

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

任何帮助,将不胜感激。谢谢


阅读 169

收藏
2020-07-26

共1个答案

一尘不染

开始倾倒在rails.js上,想知道是否有任何ajax:回调被提出。

原来他们很好,并且beforeSend和error …等等…错误吗?怎么会这样
新待办事项的创建成功完成,响应是我期望的JSON。但是在逐步执行回调代码时,我注意到一个Invalid label错误。

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

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

解决方案在response_to中

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

有点感谢Trevor
Burnham(例如BTW书)的帮助以及来自序列媒体的Amy,后者的博客文章最终为我提供了解决方案。

2020-07-26