禁用 JavaScript 时链接和表单的解决方案是什么?

what is the solution for links and forms when javascript is disabled

本文关键字:解决方案 是什么 表单 JavaScript 链接 禁用      更新时间:2023-09-26

当 Rails 和 JavaScript 被禁用时,我有 3 个问题

1)第一种情况是link_to不起作用的方法,如果它通常应该去销毁操作,它会得到显示页面,解决方案就是我们所说的"优雅降级",但我想要的是防止链接工作如果JS被禁用。有什么方法可以做到这一点?

2)第二个问题是关于注销功能(使用销毁操作),所以我有一个注销链接

link_to "logout", logout_path, method: "delete"

在我的路由文件中,我有以下行:

match "/logout", to: "sessions#destroy", via: 'delete'

如果我禁用JavaScript,则会出现错误:

No route matches [GET] "/signout"

是否也可以通过以下方式添加:"获取"?? 像这样添加到这条路线:

match "/logout", to: "sessions#destroy", via: ['delete', 'get']

3)最后一个问题是当我有一个带有提交按钮的表单时,如果JavaScript被禁用,我会收到错误:

 ActionController::InvalidAuthenticityToken in RelationshipsController#destroy

这意味着在生产中,我得到页面"出了点问题..."这里的解决方案是什么?

当你使用link_to/button_to"method: delete"时,它会生成这样的内容。

<form action="/something" class="button_to" method="post">
    <div>
        <input name="_method" type="hidden" value="delete">
        <input class="btn btn-danger" data-confirm="Are you sure?" type="submit" value="Delete"> 
        <input name="authenticity_token" type="hidden" value="gP+sFWt9Y3r0m8U4gqqoax+tnKwIIalHVxhkC2IyoHY=">
    </div>
</form>

jquery-ujs 在看到_method删除时劫持了点击。它不使用 GET/POST,它使用 DELETE。

(关于#3:请注意从link_to/button_to生成的authenticity_token。我知道的还不够详细)

TL:DR;开发人员使用 DELETE 调用来"注销"用户并不常见。只需使用 GET 即可让您的生活更轻松。

相关文章: