使用長查詢字符串時,您有幾個選項。如果這不是真的造成問題(如請求死亡),那麼你應該問自己是否真的值得把它切換到別的東西上。
使用POST請求
如果查詢字符串的長度引起的問題,您可以切換到使用POST請求,而不是GET請求從您的過濾器鏈接。這將阻止URL包含過濾器參數,但您的控制器仍然可以用相同的方式處理參數。
的link_to
助手可以設置爲使用不同的HTTP動詞如下:
link_to("My Filter", filter_path, method: :post)
請確保您更新您的路線正確,如果你使用這種技術。
使用一個Ajax請求刷新頁面
如果您配置過濾器全部是遠程(阿賈克斯)鏈接,您可以更新過濾器和刷新內容頁面的而沒有改變URL。這是解決方案的基本格局:
- 發送遠程請求到服務器與當前的過濾選項
- 更新基於這些過濾頁面內容
- 確保過濾器(和遠程請求)將在用戶的會話再次提交所有的當前參數的
商店過濾器
如果您將當前過濾器存儲在會話中,只要用戶訪問基本頁面,就可以檢索存儲的過濾器並僅顯示適當的信息。您的過濾器鏈接仍然可以是GET請求(包括冗長的查詢字符串),但不是在過濾器請求之後呈現頁面,而是不需要額外的查詢參數即可重定向回主列表。這會讓用戶覺得URL永遠不會改變,甚至可以讓你記住他們最後的過濾器,如果他們離開了。
分享鏈接
就像你提到的,分享鏈接變得與所有這些解決方案的問題。您可以在頁面上提供「共享此過濾器」部分以幫助緩解該問題。您可以在該部分放置一個用戶可以複製的URL,其中包含重新創建過濾器的必要信息。鏈接可以包含完整的查詢字符串或者可能包含過濾器的編碼版本。
感謝發佈。沒有機會通讀它,但我會。非常感謝。 – rctneil 2014-09-04 16:23:06