Rails Ajax:.js.erb呈现为文本,而不是JS

我在使用rails3来渲染Javascript时遇到了麻烦(如果这是相关的,我使用JQuery并且它工作正常,因为它在应用程序的许多其他部分中使用)而不是html。

我有什么:我认为,我有这个链接:

 :js), :remote => true %> 

首先,我真的不明白为什么我要添加:format =>:js让控制器使用JS视图,而不是HTML视图。 这是控制器的代码:

 def edit @user_repreneur = UserRepreneur.find_by_id_view(params[:id]) respond_to do |format| format.js format.html end end 

在控制器类的开头,我有这一行:

  respond_to :js, :html 

我的edit.js.erb文件包含一行警告。 但是,在呈现页面时,JS将呈现为文本,因此不会执行。 我试图将format.js行更改为

 format.js { render :layout => false } 

但它没有改变任何东西。 我想我错过了什么,但我真的不明白…

非常感谢,欢呼!

PS:我不知道这是否有用,但在我的链接帮助器中添加:format =>:js之前,视图总是呈现为HTML,如果我评论了format.html行,我有一个406服务器端不可接受的错误。

我认为问题不在于您的服务器端代码。 这对我来说都很好看。 它渲染edit.js.erb事实certificate你的服务器端代码工作正常。

问题出在您的客户端。 当它收到Ajax响应时,它不会以javascript的forms执行它。 它正在以文本forms执行它。

我自己最近遇到了这个问题,我希望我的代码可以随身携带,但我正在工作。 但是,我个人编写了jQuery Ajax请求,而不是依赖于:remote => true因为该选项主要用于表单。

尝试给你的link_to一个id,然后把这个jQuery放在你的application.js或者任何地方。

 $('#link_id').click(function(){ $.ajax({ type : 'GET', url : '/:controller/:action/', dataType : 'script' }); return false; }); 

这将获取链接的单击事件,向服务器发送请求,该服务器应返回edit.js.erb文件,然后将其作为脚本执行。

请注意,需要考虑许多安全问题以及真实性令牌等。 但是,这应该让您的警报执行并让您走上完成应用程序的正确道路。

阅读jQuery的Ajax ,了解有关POST数据的更多选项和详细信息。

希望这可以帮助。

更新:其他可能的解决方案包括使用UJS作为Javascript驱动程序。 您可以在https://github.com/rails/jquery-ujs上阅读文档,并查看有关使用UJS的Unobtrusive Javascript主题的Railscast。

似乎有点迟到提供这个答案,但最好迟到,从来没有。

你正在混合respond_to和respond_with。 在控制器类的顶部使用respond_to:js,:html。 然后将其放入编辑操作中

 def edit @user_repreneur = UserRepreneur.find_by_id_view(params[:id]) respond_with @user _repreneur end 

如果您的application.js文件中没有包含jquery_ujs lib,则js.erb文件将呈现为文本:

 //= require jquery //= require jquery_ujs 

并且您需要在gemfile中使用以下gem:

 gem 'jquery-rails' gem 'jquery-ui-rails' 

如果你在轨道上,

简单修复:向表单添加data-type =“script”。 资料来源: https : //github.com/rails/jquery-ujs/wiki/Unobtrusive-scripting-support-for-jQuery