Rails 3.1 ajax: обработка успеха - PullRequest
4 голосов
/ 05 июля 2011

Так что я играю с 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!!!")

(да, просто связывание, чтобы открыть окно предупреждения, не работает)Я пытался загрузить, но просто не могу вызвать это событие.Запрос успешно завершен, и добавлен новый todo.

Любая помощь с этим будет оценена.Спасибо

Ответы [ 2 ]

8 голосов
/ 06 июля 2011

Начал заливать rails.js и задавался вопросом, повышается ли какой-либо из обратных вызовов ajax:.

Оказалось, что они были хорошо до и отправкой, и ошибкой ... зависают ... ошибкой?Как это могло произойти?Создание новой задачи происходит успешно, ответ - 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' }

Aнемного спасибо Тревору Бернхэму (как и книга BTW) за его помощь и Эми из sequence media , чей пост в блоге в конечном итоге дал мне решение.

0 голосов
/ 05 июля 2011
  1. Что такое #new_todo? Элемент с таким идентификатором существует? Убедитесь, что $('#new_todo').length > 0 в вашем коде и что это правильный элемент для привязки вашего обработчика событий.
  2. Что такое ajax:success? API jQuery определяет событие ajaxSuccess (см. Документацию Ajax Events ), но я никогда раньше не видел версию с двоеточием.
...