2012-09-04 71 views
1

我有一個名爲pages.php的PHP文件,它返回查詢參數指定的頁面。用戶從下拉一個號碼,然後一個AJAX請求被髮送與類似號碼pages.php:帶動態頁面的HTML5 AppCache

pages.php?page=1 

的頁數是動態的。 我使用HTML5的AppCache來緩存索引頁面,但是如何讓瀏覽器緩存ajax請求。將pages.php添加到清單文件只是緩存沒有頁面的響應。但它確實緩存了任何帶有頁碼的請求。我想要做這樣的事情的清單文件:

CACHE: 
pages.php?page=* 

我試圖得到它使用戶能夠訪問他們是否下線,他們此前一直認爲的網頁。 AppCache似乎不適合使網站脫機(只能使靜態資源加載速度更快),還有其他一些功能我應該使用嗎?

回答

0

我的時間地獄搞清楚如何緩存由URI方案這樣的訪問動態頁面:

domain.com/admin/page/1 
domain.com/admin/page/2 
domain.com/admin/page/3 

現在的問題是,應用程序緩存將不緩存每個單獨的管理/網頁/ ...除非你訪問它。

我所做的是使用脫機頁面來表示您可能希望允許用戶脫機訪問的這些頁面。

離線頁面中的JS查找URI並將其擦除以找出它應顯示的頁面,並從localStorage獲取數據,當用戶訪問管理儀表板時,該數據填充所有頁面數據指向每個單獨頁面的鏈接。

我對其他解決方案是開放的,但這是我能想出的一個單獨的頁面離線一堆只訪問單個管理頁面。

0

我通過使用本地存儲解決了這個問題(我用jquery localstorage插件來解決這個問題)。

過程是

  1. 從內部頁面時,你通常會從錨HREF或重定向,而不是調用一個函數來重定向你。該函數將參數從url存儲到localstorage,然後僅重定向到不帶參數的url。
  2. 在接收目標頁面上。從localstorage獲取參數。

重定向代​​碼

function redirectTo(url) { 
    if (url.indexOf('?') === -1) { 
     document.location = url; 
    } else { 
     var params = url.split('?')[1]; 
     $.localStorage.set("pageparams", params); 
     document.location = url.split('?')[0]; 
    }; 
} 

目標頁面代碼

var myParams = GetPageParamsAsJson(); 
var page = myParams.page; 

function GetPageParamsAsJson() { 
    return convertUrlParamsToJson($.localStorage.get('pageparams')); 
} 

function convertUrlParamsToJson(params) { 
    if (params) { 
     var json = '{"' + decodeURI(params).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}'; 
     return JSON.parse(json); 
    } 
    return []; 
}