Rails update.js.erb没有执行javascript

dma*_*ter 28 javascript ajax jquery ruby-on-rails ruby-on-rails-3

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

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

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

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

<% raise params %>
Run Code Online (Sandbox Code Playgroud)

进入它,它的工作原理.

然而,即使是最简单的

alert('hello');
Run Code Online (Sandbox Code Playgroud)

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

我已经排除了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>');
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

小智 49

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


rma*_*ena 35

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

respond_to do |format|
  ...
  format.js {render layout: false}
end
Run Code Online (Sandbox Code Playgroud)

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

  • ```{render layout:false}```浪费了我3个小时的同样问题.添加后,它工作正常.Thaks (2认同)