2016-11-10 92 views
0

我知道有一些要求几乎相同的各个线程但没有人似乎真正满足我的需要....PHP的Javascript更改浏览器后退按钮行为Laravel

我的网站上,我implemeneted搜索表单。带有输入字段的简单表单,称为searchQuery和提交按钮。该表单使用POST方法发送。 我使用Laravel btw ..然后将搜索结果加载到控制器的视图中。这些显示在一个表格中。现在出现有趣的部分:找到的元素是可点击的,您可以在页面上看到关于该元素的更多详细信息。然后问题出现了:当我现在单击浏览器后退按钮或鼠标上的后退按钮时,我会看到一个窗口要求再次发送表单信息,我必须确认。

这不是我想要的,我只想回到搜索结果我收到了....

现在,我读了很多,但我仍然不知道,该怎么做。

onbeforeunload前阅读,您可以显示一条消息,但对我来说那不是有用的(我想回到搜索结果)......

所以有一些替代方案,这将是可能的(如果技术上是可行的):

  1. 只是防止对话框,要求重新提交信息,只是再次提交它不要求
  2. 不知怎的,回去在历史页面之前(也许缓存或类似的东西,搜索结果在那个时候不会改变)
  3. 如果我想,我可以包括在http://servername/search/searchquery这样的url中搜索它们,然后将这个searchquery传递到deatil视图,并有一个按钮去那个url然后再次搜索或类似的东西。然后,你可以(也许)覆盖浏览器后退按钮,按下该按钮,而不是回顾历史...

是其中一个选项可能,如果是的如何?或者还有其他方式可以提供建议吗?

+1

在这种情况下使用GET方法...使用GET –

+0

发送参数将是可能的,但我处理所有其他请求与邮政或直接写入像'/ search/searchquery'的URL而不是'/ search?term = searchquery',这也可以吗?如果是的话如何?因为我然后不会提交表单,只是使用链接去那里,但是,然后,按回车将不再工作.. – nameless

+0

更改浏览器行为似乎是你试图达到什么矫枉过正。我宁愿改变处理请求的方式。 @SaumyaRastogi有一个很好的建议 – Wistar

回答

1

按照上面的问题你的意见,你可以做这样的:

所有形式的首先应该是这样的:

<form action="/search" method="GET"> 
    <input type="text" name="searchQuery" value="Type keywords here..."> 
    <input type="Submit" value="Search"> 
</form> 

然后提交表格后,路径/ URL会是这样:

http://localhost:8000/search?searchQuery=any_search_keyword 
Route::get('search', '[email protected]'); // Laravel route 

而且你可以处理你的搜索结果在您的控制器是这样的:

function handleSearch() { 
    $searchQuery = request()->get('searchQuery'); 
    // ... Handle your search here ... 
} 

通过这种方式,您可以使用GET方法来处理搜索,这也可以防止不必要的提交对话框一遍又一遍的来回......

按我的理解,这将是您的解决方案'寻找

+0

感谢您的答案。这看起来像一个简单的方法来解决我的问题,应该工作。 – nameless