2015-09-16 145 views
2

我正在使用CodeIgniter創建一個論壇頁面(新增功能),但是一旦用戶提交了評論並刷新頁面,點擊「繼續」到「確認表單重新提交「提示。清除瀏覽器緩存以防止表單重新提交

我向控制器的方法添加了以下內容,但瀏覽器緩存中的發佈數據未被清除。

$this->output->set_header("HTTP/1.0 200 OK"); 
$this->output->set_header("HTTP/1.1 200 OK"); 
$this->output->set_header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate"); 
$this->output->set_header("Cache-Control: post-check=0, pre-check=0", false); 
$this->output->set_header("Pragma: no-cache"); 

我在做什麼錯?請幫忙。

感謝

+0

請參閱https://en.wikipedia.org/wiki/Post/Redirect/Get – TechJS

回答

1

給予與存在的信息量一個完美的答案會很辛苦,但我可以告訴你,你需要將用戶重定向的頁面提交到另一個頁面,以便在刷新後,頁面不會重新提交。

請參閱Post/Redirect/Get

1

你沒有做任何「錯誤」,但在瀏覽器方面,如果你發佈一個請求,然後刷新它(POST或GET請求),它會重新發送請求。

爲了避免這種行爲(在任何框架或應用程序中),我建議每個「提交」實際上是2請求的一部分,提交信息的一部分,然後重定向到結果的表示。

例如,假設您有一個帖子消息處理程序(控制器方法)和一個註釋處理程序(控制器方法)的視圖。
然後用戶進入視圖評論頁面,它填充一個新的評論並且不是發佈到同一頁面,而是發佈到創建方法頁面/控制器/方法,而不是顯示任何它實際重定向到原始頁面的地方結果將被看到。

所以,這樣的事情:

  • /comments收到GET請求,並表示意見
  • /comments頁有進入新評論的表單列表,這種形式的行動做了POST到/comment/add
  • /comment/add收到POST請求,它創建一個新評論,然後重定向回/comments,它不顯示任何HTML,只是重定向

我希望有幫助。

+0

好的答案,但對於今天的用戶體驗設計,用戶希望能夠在單個頁面內完成所有活動(基本上可以減少點擊次數至達到功能)。我正在考慮的另一種方法是使用模態形式來處理評論發佈,這也將處理過程並關閉成功。你怎麼看? – Olamide

+0

嗨,是的,絕對可以在模態窗體上使用AJAX選項。 儘管將請求發佈到不同的URL然後重新導向不會影響用戶體驗感知。你並不需要確切的AJAX才能擁有出色的用戶體驗(因爲擁有AJAX,你的用戶體驗並不是很好),因爲你如何規劃應用程序的交互和可用性,用戶體驗的好壞取決於你的用戶體驗。但肯定,通過一切手段去與AJAX :) –