假設網頁 A 為資料列表、B 更新資料庫,通常想讓使用者即時看到修改的結果,流程不外乎就是 A->B->A
但是如果使用者在 A 送出資料到 B ,由 B 處理資料庫新增及更新,再回到 A 時,可能還是在使用者未更動的狀態。
最糟糕的是,連該做的 header cache expire 都設定好了,那該怎麼辦?
一般 header 的 cache 設定,依照使用的 script 不同,寫法也不同,以 PHP 為例就是:
response.addHeader("Pragma","no-cache");
response.addHeader("Cache-Control","no-cache, must-revalidate");
response.addHeader("Cache-Control","post-check=0, pre-check=0");
response.addHeader("Cache-Control","private");
或是
if (request.getProtocol().compareTo("HTTP/1.0")==0){
response.setHeader("Pragma","no-cache");
}
else if (request.getProtocol().compareTo("HTTP/1.1")==0){
response.setHeader("Cache-Control","no-cache");
}
response.setHeader("Expires", "0");
這二種都是常見的做法,我就不再多說,但是重點是當加了這些東西,還是會看到之前的資料就是瀏覽器的問題了。
解決的方法也很簡單,一般會出現 A->B->A 還是看到之前資料,通常有二個原因:
1.Cache 沒有設定逾時
2.B->A 轉頁速度太快,造成瀏覽器認為只要丟出之前的資料就好
目前我們要處理的就是 2 的狀況,您可以使用 Javacript 做時間 dealy、alert 出修改成功的訊息,或是改為用比較簡單的 header
refresh 來轉頁即可。
header refresh 範例如下:
<head>
<meta http-equiv="Refresh" content="3;URL=xxx.php">
</head>
其中 3 為秒數,但是要注意的是,秒數如果太小,還是有可能會看到之前的資料,這裡就可以視情況自行微調即可。
4 comments On 返回資料列表網頁還要 Reload 才會更新資料怎麼辦?
使用 session_start(); 也可以做到這個功能。
A->B->A
在 A 頁面加上
會自動 reload
感谢作者。我根据本文中介绍的情况1和处理方法解决了ASP.NET中,A、B頁关联的情况下,在B頁刷新资料後,A頁不更新的问题。
我的做法是在傳回來的網址加上一個 “一直變動” 的參數,使得每次的網址都不一樣,這樣就會強迫瀏覽器每次都要到伺服器取回最新的資料了,例如在傳回的網址加上 “&TimeStamp=391234324″,其中的數值是每次變動的數值
那請問一下,假如我在A時為資料列表,並且同時新增連到B,然後在B時連資料庫新增了一筆資料,也就是從A->B->A,然而在A中有出現新增的資料,
但是到C看卻沒有,請問這要怎麼辦呢??