我在用rails3呈现Java脚本时遇到了麻烦(如果相关,我使用JQuery,它工作正常,因为它已在应用程序的许多其他部分中使用)而不是html。
我所拥有的:我认为,我有此链接:
<%= link_to 'Edit', edit_user_repreneur_path(@user_repreneur, :format => :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事实证明您的服务器端代码运行良好。
edit.js.erb
问题出在您的客户端。当它收到Ajax响应时,就不会将其作为javascript执行。它以文本形式执行。
我本人最近遇到了这个问题,希望我可以随身携带我的代码,但我正在工作。但是,我亲自编写了jQuery Ajax请求,而不是依靠它,:remote => true因为该选项主要在表单中使用。
:remote => true
尝试提供您link_to的ID,然后将此jQuery放在您的application.js或任何位置。
link_to
application.js
$('#link_id').click(function(){ $.ajax({ type : 'GET', url : '/:controller/:action/', dataType : 'script' }); return false; });
这将捕获链接的click事件,向服务器发送请求,该请求应返回您的edit.js.erb文件,然后将其作为脚本执行。
提醒您,要考虑很多安全问题,以及真实性令牌等。但是,这应该使您的警报得以执行,并使您正确完成应用程序。
阅读jQuery的Ajax,以获取更多选项以及有关POSTing数据的详细信息。
希望这可以帮助。
更新:其他可能的解决方案包括使用UJS作为Javascript驱动程序。您可以阅读https://github.com/rails/jquery- ujs上的文档,并使用UJS 观看主题Unobtrusive Javascript的Railscast 。