Rails 5.1 - отправить форму через ajax, возвращенный javascript не выполняется

0

У меня есть форма Rails 5.1 для создания пользовательского объекта, который выглядит так:

<form class="upload-form" action="/users" accept-charset="UTF-8" data-remote="true" method="post">

<input name="utf8" type="hidden" value="✓">

...all the fields...

  <div class="actions">
    <input type="submit" name="commit" value="Submit" data-disable-with="Submit">
  </div>
</form>

Он подает штраф, и срабатывает действие контроллера. Вот:

  def create
    @user = User.new(user_params)    
    if @user.save
      respond_to do |format|      
        format.js 
      end
    end
  end

Но возвращенный файл create.js.erb не выполняется в браузере:

$('#upload-form').on('ajax:success', function(event, data, status, xhr) {
  console.log(data);
  var field = $('#upload-form').find('input[name=fileinput]');
  var file = field[0].files[0];
  console.log(file);
});

Я смущен, почему этот js не выполняется (я вижу, что он вернулся в ответ).

  • 0
    вероятно, имя файла js должно быть create.js.erb
  • 0
    это называется create.js.erb. Вопрос обновлен
Показать ещё 2 комментария

2 ответа

1
Лучший ответ

Вы определили upload-form как class, но вы называете ее ID в JS

+ Изменить

$('#upload-form').on('ajax:success', function(event, data, status, xhr) {
  console.log(data);
  var field = $('#upload-form').find('input[name=fileinput]');
  var file = field[0].files[0];
  console.log(file);
});

к этому

$('.upload-form').on('ajax:success', function(event, data, status, xhr) {
  console.log(data);
  var field = $('.upload-form').find('input[name=fileinput]');
  var file = field[0].files[0];
  console.log(file);
});
1

Для тех, кто еще не справляется с этой проблемой, но вышеизложенное не помогает:

Я использую CoffeeScript и столкнулся с этой проблемой. У меня был файл index.coffee, который бы превратил частичный шаблон в функцию для замены div на стороне клиента. Работал БОЛЬШОЙ, когда я вызывал маршрут обычным способом, но не работал, когда я показывал его с помощью кнопки "button_to".

Rails правильно отображал JS, отправляя его в браузер, и я мог тестировать JS, и он работал нормально. Но он не будет вызываться при нажатии кнопки button_to.

Все, что я сделал, было переименовано в файл index.js.coffee, и он начал работать. Yay, Rails странность!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню