【问题标题】:Is making POST requests with additional parameters via link_to acceptable?通过 link_to 发出带有附加参数的 POST 请求是否可以接受?
【发布时间】:2011-04-29 17:26:38
【问题描述】:

在 Rails 中使链接发出 POST 请求很容易。像link_to 'Click me', some_path, :method => :post 这样的东西。这很好用......除非你需要传递额外的参数。因为没有办法从链接发出实际的 POST 请求,Rails 用 GET 请求伪造它,这意味着如果你尝试将额外的参数传递给 @987654322 @,它将它构建到查询字符串中。因此,当您将鼠标悬停时,您会看到如下所示的链接:

/some_path?foo=var&foo=bar[foo][bar]

通常这不会太糟糕,但如果你有一个需要一些嵌套参数的控制器,它会变得非常难看。

所以我的问题是,这会打扰其他人,还是只有我自己?

我能想到的唯一解决方法是将href更改为#,在附近添加一个隐藏的表单,并在链接中添加一个单击处理程序,该链接将表单序列化并在单击链接时提交。这使得链接不优雅地退化,并且对于基本上等同于审美抱怨的大量工作。但我对我的网址非常着迷。有没有更简单的方法?还是我只是疯了,应该只处理查询字符串中的参数?

【问题讨论】:

  • 我猜你不使用表单有一个非常非常好的理由?
  • 嗯,这是我考虑过的一个选项,只是让链接本身成为一个表单。尽管设置表单/提交按钮的样式可能非常困难(甚至不可能),这取决于它需要的外观。但真正的原因是它看起来有点矫枉过正。在这种情况下,我倾向于简单而不是风格。
  • 让一个按钮看起来像一个链接并不难,但是你会在浏览器之间花费相当多的时间来调整填充等。我实际上不明白你想要实现什么。为什么你希望它是一个发布请求?
  • 按钮/链接需要点击资源的创建动作,这将是一个POST请求。
  • 但这不是发布请求,而是获取请求,我认为如果您需要,您应该将创建路由设为获取请求。我知道这违反了宁静的粗俗惯例,但您肯定想要做的更糟吗?

标签: javascript ruby-on-rails ajax


【解决方案1】:

网络是一个丑陋的地方,其中一件令人讨厌的事情是,如果不创建表单或在后台执行一些疯狂的 JavaScript 来处理它,就无法发布链接。

它困扰着那些关心他们的 URL 是否整洁的人,事实上很少有人真正关心这个问题,但唯一可靠的解决方案是一个表单加上一个整洁的小 jQuery 扩展来处理触发器。

不过,为了避免在浏览器中看到丑陋的 URL,您始终可以通过 AJAX 发出请求,发回 URL,然后在 AJAX 部分完成后重定向到该 URL。这使您有机会展示“提交”或“请求”类型的微调器。

【讨论】:

  • 是的,我认为这可能比它的价值更多。我想我只需要习惯于发送一些看起来很讨厌的 URL。
  • URL 可能很难看,但体验不一定如此。请记住,您的普通用户不会检查 Firebug 网络浏览器。
【解决方案2】:

下面的内容怎么样:

<html>
<head>
<script>
function myOnClick() {
  // ... do custom ajax w/whatever parameters.
  alert("myOnClick()");
}
</script>
</head>
<body>
<a href="http://www.example.com/" onClick="myOnClick();return false;">link text</a>
</body>
</html>

浏览器会在状态栏中显示href值,但myOnClick()函数是点击链接时实际调用的函数。需要return false 部分来防止浏览器处理href 属性。

myOnClick() 函数可以使用您想要的任何参数执行任何操作,例如 ajax 请求。

【讨论】:

    猜你喜欢
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 2020-02-06
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    相关资源
    最近更新 更多