0

在过去的 3 天里,我一直在努力解决这个问题(不开玩笑!!!)....这似乎是一件非常简单的事情,但我就是做不到。所以我在这里提出这个问题,并对任何可行的方法持开放态度。

背景:提交时的高级搜索表单用于生成对服务器来说太大的 URL。所以表单必须通过 POST 提交。到目前为止,一切都很好。表单提交成功,并显示结果。唯一剩下的问题是分页。

因为它是一个 POST 调用,所以它排除了分页。虽然 will-pagination 将参数页面合并到现有参数,但问题是它显示在 url 上导致相同的错误。

问题:那么有什么办法,如果用户点击一个链接NEXT,我可以

a) 更新页面参数

b) 保留现有参数

c) 在不更改 URL 的情况下

d) 将控制权转移回控制器中的动作?

到目前为止建议的唯一解决方案是隐藏表单,重新填充它的值并再次提交。表格非常复杂,所以如果有更清洁的方式我想知道。

4

2 回答 2

1

我从你的评论中看到了你想要的。所以相应地编辑我的回复。您希望在排序中选择哪一列的信息可供控制器使用,而 url 字符串中没有该信息,并且您希望对此使用 GET 而不是 POST

您面临的挑战是您希望保留请求之间的状态,并且您需要一种机制来执行此操作。POST 通过在 POST 请求的正文中发送该信息来保留该信息。GET 通过允许您填充查询字符串来做到这一点。保存状态的另一种方法是使用 cookie。

您可以在页面上使用 javascript 操作 url。网上有这方面的教程。

但是,如果您只想要一个简单的控制器破解,就像您在评论中所说的那样,那么我能想到的最简单的方法是允许用户向其中包含查询参数的 url 发出 GET 请求,然后分两步处理此请求- 第一步将查询信息保存到 cookie,第二步将它们重定向到去掉查询字符串数据的 url,然后在为该页面构建数据之前查看 cookie 以查看它是否具有这些字段。这是hacky,但它的工作原理。

def sort
  session[:sort] = params[:sort]
  redirect_to url_without_the_query_string
end

还有新的 html 5 功能:

window.history.replaceState(“Replace”, “Page Title”, “/mypage”);

从这里的stackoverflow答案:如何使用javascript从url中删除查询字符串

但是我不确定我是否建议在加载后弄乱 url(我对该解决方案知之甚少,所以我建议您阅读该答案,看看是否合适)。因此,如果您必须从 url 字符串中丢失该数据,因为您需要在请求之间以某种方式传递它,您要么必须使用 POST,要么使用我上面描述的会话 cookie/重定向方法。

于 2013-03-24T08:18:56.360 回答
0

你的html<form>action属性吗?如果没有,请添加一个指向该页面的内容。

如果您想保留当前的 ​​GET 参数以便 POST 的结果可以使用,您还需要修改标题链接上触发的 javascript,以便以及(或代替)修改查询字符串,它们编写相同数据到隐藏的表单字段(当然然后发布在请求的正文中)。你的 JS 库可能已经包含了有用的函数。

于 2013-03-24T13:31:47.953 回答