通过link_to接受带有附加参数的POST请求吗?

时间:2011-04-29 17:26:39

标签: javascript ruby-on-rails ajax

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

some_path

通常这不会太糟糕,除非你有一个控制器期待一些嵌套参数,它会变得非常难看。

所以我的问题是,这会困扰其他人,还是仅仅是我?

我能想到的唯一解决方法是将href更改为/some_path?foo=var&foo=bar[foo][bar],在附近添加隐藏表单,然后将单击处理程序添加到序列化表单的链接中,并在单击链接时提交它。这使得链接不合理地降级,并且对于基本上等于审美抱怨的工作而言是非常多的工作。但我对我的网址非常着迷。有没有更简单的方法?或者我只是疯了,应该只处理查询字符串中的参数?

2 个答案:

答案 0 :(得分:1)

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

让人担心他们的URL是多么整洁,这是一个实际上很少有人担心的问题,但唯一可靠的解决方案是一个表单加上一个整齐的小jQuery扩展来处理触发器。

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

答案 1 :(得分:0)

如下所示:

<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请求,无论你想要什么参数。