2016-03-09 6 views
1

Я пишу очень простое приложение todo в Rails.Не удается получить jQuery's ajaxSuccess() для работы

Вид:

h2 Your todos 
ul#todo_list 
    = render @todos 
hr 
    h4 Add new 
    = form_for(Todo.new, url: {action: 'create'}, remote: true) do |form| 
    = form.text_field :text 
    = form.submit 'Add' 

CoffeeScript:

class Todo 
    constructor:() -> 
    @bindEvents() 

    bindEvents:() => 
    console.log 'test1' 
    $(document).ajaxSuccess(@onAjaxSuccess) 

    onAjaxSuccess: (event, xhr, settings) -> 
    console.log 'test2' 
    $('#todo_list').append(xhr) 

    @isPresent: (element_id) -> 
    $("##{element_id}").length > 0 

$(()-> 
    new Todo if Todo.isPresent('todos') 
) 

Когда я создаю новый TODO, test1 печатается в консоли. Я получаю надлежащий ответ 200. Метод @onAjaxSuccess() не запускается (test2 не печатается). Зачем?

UPDATE:

Я только что прочитал, что jquery-ujs пожары ajax:success события, так что я также пытался:

bindEvents:() => 
    console.log 'test1' 
    $('#new_todo').on('ajax:success', @onAjaxSuccess) 

Тем не менее не работает.

+0

Что ожидаемый результат? – guest271314

+0

@ guest271314 Ожидаемый результат - напечатать 'test2' в консоли. – pmichna

+0

Является ли запрос ajax вызываемым в 'js' в вопросе? – guest271314

ответ

0

Проблема заключалась в том, что не 'ajax:success' был уволен, но 'ajax:error.' В XHR я возвращался элемента HTML и JQuery пытался разобрать его, как JSON (Подсказка: связываются с 'ajax:complete' и посмотреть, какие ошибки вы получаете).

Solution - изменение типа данных формы:

= form_for(Todo.new, url: {action: 'create'}, remote: true, html: { data: {type: :html} }) do |form| 
    = form.text_field :text 
    = form.submit 'Add' 
1

The

@onAjaxSuccess: (event, xhr, settings) -> 

должен быть

onAjaxSuccess: (event, xhr, settings) -> 

так, что он будет добавлен в prototype и доступен с this

+0

Это не помогло. – pmichna

+1

Кажется, работает на https://jsfiddle.net/gaby/uqwvhk7m/ –

0

Примечание, не пробовал coffeescript.

Является ли запрос ajax составленным по адресу javascript на вопрос?

Второй параметр .ajaxSuccess() - jqXHR объект. append(), похоже, не бросает ошибку, когда объект передается как параметр, но не добавляет объект как строку в элемент.

var obj = {"abc":"123"}; 
$("body").append(obj); 

Если Ajax запрос сделан form подачи на form.submit?, Вы должны быть в состоянии использовать $("#todo_list").append(xhr.responseText) для добавления ответа Ajax запроса к элементу.

+0

Выполняется запрос ajax - это выполняется Rails. Я получаю ответ, который я хочу. Я даже не попал в метод 'onAjaxSuccess', поэтому проблема не касается' append'. – pmichna

+0

Имеет ли значение, что '@ onAjaxSuccess' определяется после' $ (document) .ajaxSuccess (@onAjaxSuccess) ',' bindEvents'? Вы пытались разместить 'bindEvents' после' @onAjaxSuccess: (event, xhr, settings) -> '? Или они являются отдельными функциями? Определяется ли 'form' перед' $ (документом) .jaxSuccess (@onAjaxSuccess) 'обработчик событий? – guest271314

Смежные вопросы