2016-11-10 56 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