2012-08-12 83 views
0

有沒有什麼方法可以檢測窗口是否被用戶刷新,或者是否是window.location.reload(); js命令已執行並刷新頁面?檢測JS是刷新頁面還是用戶確實

因爲如果用戶刷新了頁面/導航,並且想要保留此過濾器會話變量(如果我重新加載了javascript),我想取消設置Filter會話變量。

我試圖通過與$_SERVER['HTTP_REFERER']

工作當我做window.location.reload(),$ _ SERVER [ 'HTTP_REFERER']變爲全電流通路的鏈接,所以我試圖做的事:

if(!isset($_SERVER['HTTP_REFERER']) || $_SERVER['HTTP_REFERER'] != url::base(true).Request::current()->uri()) 
{ 
    $session = Session::instance(); 
    $session->delete('deal_filter'); 
} 

但這不是有效的,只有在有時。

如果我不能通過這種方式檢測到,有沒有其他的方法來完成這個?

+0

當Javascript刷新它時,是否可以使用POST操作向頁面提交一個值,然後檢查該值以確定它是哪種刷新? – 2012-08-12 03:10:14

+0

@PeteSchlette是的,當然,好主意!告訴我怎麼做 - 唯一需要的是它像簡單的window.location.reload()那樣刷新頁面。 – Karem 2012-08-12 03:14:35

回答

2

您可以嘗試向您的頁面提交帶有值的POST請求,而不是刷新。我想,所有你需要做的就是添加一種形式,

<form name="refresh_form" action="mypage.php" method="post"> 
<input type="hidden" name="refresh" value="yes"> 
</form> 

更換你的JavaScript代碼與提交表單一些代碼清爽,

document.refresh_form.submit(); 

併爲您在PHP的價值在您的頁面上:

if (isset($_POST['refresh'])) 
{ 
    // handle the case when your Javascript submitted the refresh 
}