0

我有一个显示可供预订的房间的搜索表单,如果我预订房间并在之后点击浏览器中的后退按钮,搜索结果仍会显示。当我回击时是否可以重新加载页面,以便用户必须再次单击搜索按钮才能查看可用房间?我只想要没有结果的默认搜索表单?我以前试过这个:

before_filter :set_cache_buster
def set_cache_buster
    response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
    response.headers["Pragma"] = "no-cache"
    response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
 end

但这只是重新加载页面,用户输入参数仍在搜索中,所以它基本上显示与没有重新加载相同的页面,谢谢

4

1 回答 1

2

如果您的表单方法是“GET”,则当您点击返回按钮并且查询字符串都在 url 中时,该页面始终可用。在许多情况下,这种效果是首选,例如,您可以为 Google 搜索网址添加书签。

您可以将表单方法更改为“POST”,这样该页面将不再可用。

添加

谨慎使用它。按照惯例,“GET”是为了获取数据,“POST”是为了添加一些数据。为获取数据构建了一个搜索表单,因此表单方法的约定是“GET”,这里没有错。所以只有在你真的需要时才改变它。

添加更多OP说他不能改变表单方法

好吧,这是一个技巧,如果您希望搜索结果仅在单击按钮时出现,而不是带有参数的 url。

这个想法是在单击按钮时使用 Javascript 附加一个新的隐藏输入,然后控制器验证这个新参数是否存在。如果存在,则处理并返回结果,否则显示一些错误。

# JavaScript
$('#the_form button').on('submit', function() {
  this.preventDefault();
  this.parent.append('<input type="hidden" name="human_hit" value="yes" />');
  this.parent.submit();
})

# Controller
def search
  if params[:human_hit]
    # Do search logic and deliver
  else
    redirect_to :back, alert: "You need to hit the button to search"
  end
end

这是一个 hack 并且未经验证,这个想法应该能够解决问题。

于 2013-08-20T09:35:01.720 回答