Rails update.js.erb没有执行javascript

我正在rails中构建一个表单,它将通过ajax编辑现有问题。

提交表单并更新问题后,控制器中的更新方法将呈现update.js.erb,这将再次隐藏表单。

我的问题是update.js.erb中的javascript代码根本没有执行。

我知道该文件正在渲染,因为它显示在服务器输出中,当我放入时

 

进入它,它的工作原理。

然而,即使是最简单的

 alert('hello'); 

在同一个文件中没有任何效果。

我已经排除了javascript和jquery配置问题,因为相同的代码在我的edit.js.erb文件中完美运行。 它只是在update.js.erb中不起作用。

我错过了什么?

编辑:

Firebug没有显示任何错误。 以下是firebug网络面板中的响应:

 alert('hello'); $('#question_body').replaceWith('

jhsdfjhdsb k jdfs j fjfhds jfshaflksd;hf sdldfs l fdsalkhdfskhdfs;fd lfdksh hfdjaadfhsjladfhsjadfs ;df sjldfsj dfas hafdsj fdas ;ldfas ldfs df dl;hdf fdh ;fdj ;lfads

');

def更新

编辑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 

$.ajax调用中,请确保将dataType选项设置为"script"否则响应可能以其他方式解释,因此不会作为JS执行。

你使用haml或html.erb吗? 如果是前者,那么这可能是解决方案:

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

我有完全相同的问题,在早期发现这个问题,花了一个小时左右的谷歌搜索在StackOverflow上找到这个问题导致我: jQuery + Ajax + Haml。 js.erb文件未触发

在你的update.js.erb文件中,你需要在执行ruby代码的任何地方转义javascript。

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

这就是为我解决的问题……

这个问题不仅仅是因为Controller方面。 它也可以在View侧,您没有说明您的post请求的数据类型。

确保在您的控制台中将请求视为JS

参考: 类似的问题

我遇到了同样的问题并找到了这个页面。 我尝试了这里列出的方法,但没有找到运气。 稍后以下方法解决了我的问题。

我原来的代码是:

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

我将其更新为:

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

现在它按预期工作。

发现它是什么! 😊(轨道4的解决方案)

如果您的ajax调用参数不在允许列表中,则记录会被保存,您不会收到有关“不允许”参数的错误消息,但update.js.erb将无法运行 – 即使您的终端将反馈’Rendered update.js.erb etc’

如果额外参数是模型中的属性,则只允许它。

允许非模型参数的最简单方法是在模型中添加:

  attr_accessor :paramKeyTroublesome 

然后你也可以在控制器中允许它。

在$ ajax调用中,需要正确地对数据进行哈希处理:

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