gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:45:22 25 4
gpt4 key购买 nike

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

我有什么:我一看,我有这个链接:

<%= link_to 'Edit', edit_user_repreneur_path(@user_repreneur, :format => :js), :remote => true %>

首先,我真的不明白为什么我必须添加 :format => :js 才能让 Controller 使用 JS View ,而不是 HTML View 。这是 Controller 的代码:

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

在 Controller 类的开头,我有这一行:

  respond_to :js, :html

我的 edit.js.erb 文件包含一行带有警报的内容。但是,渲染页面时,JS 被渲染为文本,因此不会被执行。我尝试将 format.js 行更改为

format.js { render :layout => false }

但这并没有改变任何事情。我想我错过了一些东西,但我真的不明白什么......

提前非常感谢,干杯!

PS:我不知道这是否有帮助,但在我的链接助手中添加 :format => :js 位之前, View 始终呈现为 HTML,并且如果我注释了 format.html 行,我在服务器端遇到了 406 Not Acceptable 错误。

最佳答案

我认为问题不在于您的服务器端代码。在我看来这一切都很好。它正在呈现 edit.js.erb 的事实证明您的服务器端代码工作正常。

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

我自己最近也遇到了这个问题,我希望我能随身携带代码,但我正在工作。不过,我个人编写了 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 文件,然后将其作为脚本执行。

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

阅读jQuery's Ajax了解有关发布数据的更多选项和详细信息。

希望这有帮助。

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

关于jquery - Rails Ajax : . js.erb 呈现为文本,而不是 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5311247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com