Подтвердить что ты не робот

Rails update.js.erb не выполняет javascript

Я создаю форму в рельсах, которые будут редактировать существующий вопрос через ajax.

После того, как форма отправлена ​​и вопрос обновлен, метод обновления в контроллере отображает update.js.erb, который снова скроет форму.

Моя проблема в том, что код javascript в update.js.erb вообще не выполняется.

Я знаю, что файл является рендерингом, потому что он отображается на выходе сервера, и когда я помещаю

<% raise params %>

он работает.

Однако даже самый простой

alert('hello');

не действует в том же файле.

Я исключил проблемы с настройкой javascript и jquery, потому что тот же код отлично работает в моем файле edit.js.erb. Он просто не работает в update.js.erb.

Что мне не хватает?

Изменить:

Firebug не показывает ошибок. Вот ответ на сетевой панели firebug:

alert('hello');
$('#question_body').replaceWith('<h4><p>jhsdfjhdsb k jdfs j fjfhds <strong>jfshaflksd;hf sdldfs l fdsalkhdfskhdfs</strong>;fd lfdksh hfdjaadfhsjladfhsjadfs ;df sjldfsj dfas hafdsj fdas ;ldfas ldfs df dl;hdf fdh ;fdj ;lfads</p></h4>');

def update

Изменить 2:

Это действие контроллера:

def update
  respond_to do |format|
    if @question.update_attributes(params[:question])
      format.html { redirect_to @question, :flash => { :success => 'Question was successfully updated.' } }
      format.json { head :no_content }
      format.js {}
    else
      format.html { render action: "edit" }
      format.json { render json: @question.errors, status: :unprocessable_entity }
    end
  end
end
4b9b3361

Ответ 1

В своем вызове $.ajax обязательно установите для параметра dataType значение "script", иначе ответ может быть интерпретирован другими способами и, следовательно, не выполнен как JS.

Ответ 2

Вы работаете с haml или html.erb? Если первое, то это может быть решением:

respond_to do |format|
  ...
  format.js {render layout: false}
end

У меня была одна и та же проблема, я нашел этот вопрос на ранней стадии, занял еще один час Googling, чтобы найти этот вопрос в StackOverflow, который привел меня к нему: jQuery + Ajax + Haml, Файлы js.erb не запускаются

Ответ 3

В вашем файле update.js.erb вам нужно избежать javascript везде, где вы выполняете рубиновый код.

$('.container').empty().append('<%=
  escape_javascript(
    render 'update'
  )
%>')

Это то, что решило это для меня...

Ответ 4

Эта проблема возникает не только из-за Контроллер. Он также может быть на стороне Вид, который не уточнил тип данных вашего запроса на отправку.

Убедитесь, что в консоли консоль обрабатывается как JS.

Ссылка: Аналогичная проблема

Ответ 5

Я столкнулся с той же проблемой и нашел эту страницу. Я пробовал методы, перечисленные здесь, но не нашел удачи. Хотя позже следующий метод решает мою проблему.

Мой исходный код:

$('#html_id').html('<%[email protected]_variable%>');

И я обновил его до:

$('#html_id').html('<%=raw @ruby_variable.to_json%>');

Теперь он работает так, как ожидалось.

Ответ 6

Узнал, что это такое! 😊 (решение для рельсов 4)

Если у вас есть параметры вашего аякса, которые не указаны в вашем разрешенном списке, запись сохраняется, вы не получаете сообщений об ошибках о "недопустимых" параметрах, но update.js.erb не будет работать - даже хотя ваш терминал будет возвращать "Rendered update.js.erb и т.д."

Если дополнительный параметр является атрибутом в вашей модели, просто разрешите его.

Самый простой способ разрешить немодельный параметр - добавить в свою модель:

  attr_accessor :paramKeyTroublesome

Затем вы также можете разрешить его в контроллере.

в вызове $ajax, данные должны быть правильно обработаны:

  data: {model_name: {paramKey1: value, paramKeyTroublesome: value}}

Ответ 7

Еще одна проблема, о которой следует знать, - это ошибка в вашем файле update.js. Ничего не будет выполняться, если есть какие-либо синтаксические ошибки. Вы можете проверить это, зайдя в инспектор браузера и включив Log XMLHttpRequests затем просмотрите выходной файл js.