远程 link_to 请求的是 html 而不是 js

Posted

技术标签:

【中文标题】远程 link_to 请求的是 html 而不是 js【英文标题】:Remote link_to is requesting html instead of js 【发布时间】:2021-04-04 08:33:03 【问题描述】:

我想这样做,当您单击链接时,它会在同一页面上附加有关帖子的一些信息,而无需重新加载该页面。我实现这一点的方法是使用 jQuery。所以我在我的视图中使用 show.js.erb 设置<%= link_to posts_controller(post), remote: true %>。这不起作用,因为它只是将我发送到 html 页面而不响应 javascript。这是使用 GET 而不是 POST 请求。

我尝试从我的application.js 添加和删除rails-ujsjquery_ujs,使按钮将您发送到它的JavaScript 格式(虽然只显示原始JavaScript),我尝试使用不同的jQuery 版本(jQuery 1 和 3),以及从我的 application.html.erb 中删除和添加 <%= javascript_include_tag :jquery %>

我已经添加了

respond_to do |format|
      format.html
      format.js
end

到我的控制器。我的application.js 中有//= require jquery3//= require jquery_ujs

我已将alert('sumthing'); 添加到我的show.js.erb,但单击链接时没有显示任何内容,这让我得出结论,jQuery 或我设置链接的方式有问题。

【问题讨论】:

【参考方案1】:

我假设您的 Rails 应用程序没有您认为的 javascript_include_tag(或 javascript_pack_tag)。 rails 应用程序中的 POST 方法可以通过 javascript 正确工作。

如果您的 Rails 应用程序版本为 6,则应在 application.html.erb 中使用 javascript_pack_tag。

可能,在网络浏览器控制台中,您可以找到某种与 javascript 读取相关的错误。

你应该检查一下。

【讨论】:

我的<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> 中有application.html.erb,仅此而已。我只在我的网络浏览器控制台中收到警告,它们都是关于“Cookie“密钥”将很快被视为跨站点 cookie”。 我假设您的应用程序不读取 javascript 文件。你的应用在 javascript/packs 目录下有 application.js 吗? 有趣。我的应用程序确实有 application.js。我在 application.js 中添加了 jquery3 和 jquery_ujs application.js在packs目录下?我假设您的应用程序无法读取所有 javascript 文件。在 Rails 6 中,应用程序默认通过 webpacker 读取 javascript 文件。 是在包目录下。我应该尝试将 jQuery 安装到我的 webpacker 吗?【参考方案2】:

找出问题所在。这是因为对于 rails 6,您必须使用 jQuery 的 web packer 版本。我想出了如何使用this helpful guide. 安装它也感谢 educ_gt 引导我解决我的问题。

【讨论】:

以上是关于远程 link_to 请求的是 html 而不是 js的主要内容,如果未能解决你的问题,请参考以下文章

如何通过link_to传递一个post请求

如何构建一个带有字符串ID而不是数字ID的link_to标记?

如何从 Rails 中的控制器混入和调用 link_to?

以远程格式提交嵌入式link_to远程导致表单ajax触发

使用方法对 link_to 的 ajax 请求:在禁用 javascript 的情况下放入 rails

Rails 3 - 链接/按钮运行 ajax 请求而不重定向