2009-09-24 34 views
2

是否有可能讓JavaScript(特別是JavaScript變量及其內容)在完整的HTTP請求中存活?我想跨頁面更改「緩存」/堅持信息客戶端,而不必使用隱藏的表單域或任何HTML相關的。JavaScript可以在完整的HTTP請求往返中生存嗎?

這可能嗎?

編輯:讓我爲我的意思添加一個用例。

  1. 比方說,我有一個JavaScript數組 稱爲arrayOfPersons我 加載頁/主頁, 的一部分,現在它包含1,000個對象 客戶端。
  2. 現在用戶切換頁面, 加載一個全新的頁面/我的帳戶進入 瀏覽器
  3. 我的目標:仍然有arrayOfPersons我裝上頁/主頁提供用戶所請求的完全後新頁面/ MyAccount。

希望澄清我的意思。謝謝!

+0

這不就是Ajax所做的嗎? – Fragsworth 2009-09-24 09:04:24

+0

@Fragsworth:不知道你爲什麼會在這種情況下想到AJAX。 AJAX用於對服務器的異步請求。與客戶端上的緩存信息無關。 – Alex 2009-09-24 09:05:18

+4

當然,但Ajax將是解決這種持久性問題的標準方法 – spender 2009-09-24 09:07:12

回答

0

一個框架會給你一個地方堅持你的JavaScript,但整個頁面加載...我認爲不是。

Cookie可能對「堅持」數據也很有用,但這不是你問的。

2

找到一種有用的一個

JSOC: JavaScript Object Cache

的JSOC框架是一個可插入的,可擴展的 ,開源客戶端 緩存JavaScript框架。

JSOC提供Web開發人員進行共同 緩存技術(添加,替換,刪除 ,沖洗等)的任何支持JavaScript的瀏覽器 內 直接的方式。

由於JSOC是一個獨立的JavaScript 模塊,結合JSOC到Web 開發項目的 與普通高速緩存方法工作的問題,包括腳本參考,並 。 底層方法包含在JSOC JavaScript模塊 中,因此 開發人員可以專注於Web 開發任務。

+0

我認爲這是一個頁面的內存緩存 - 它不會按照要求在頁面之間保留任何內容。 – Nick 2009-09-24 09:19:43

+0

亞歷克斯正在詢問如何解決這個問題。 – 2009-09-24 12:34:10

0

如果我理解正確的話,你需要的是添加你自己的緩存功能集成到各種形式的onsubmit和的onClick各個環節,水木清華這樣的:

var cachedpages; 
$("A").onclick(function(){ 
    url = $(this).attr('href'); // maybe hash? 
    if (cachedpages[url]) { 
     // replacing all html 
    } else { 
     $.get(url, function(data){ 
       cachedpages[url] = data; 
       // replacing all html 
     }); 
    } 
    return false; 
}); 
+0

我已經加了一些說明:) – Alex 2009-09-24 09:13:29

+0

哦。我真的不得不提高我的英語技能:)試圖告訴用戶安裝Gears並在那裏存儲您的數據 – 2009-09-24 09:42:13

3

是的,它是可能的。在整個會話中,我用它來維護頁面狀態(在客戶端)。

有一個基本頁面(如master),永遠不會刷新整個會話,並且只有其中的iframe。並且所有的應用程序頁面將被加載到該框架中。

將您的狀態信息作爲JS對象存儲到該母版頁中。您可以從iframe中的子頁面訪問母版頁(父)的javacript對象。它將通過客戶端的會話進行維護。

這是最簡單的方法。它的工作非常整齊。

+0

您是否曾遇到過這方面的問題,例如:瀏覽器不喜歡它,設計問題或類似的東西? – Alex 2009-09-24 09:14:36

+0

沒有Alex ..我們從來沒有遇到過這種方法的任何問題。我們的應用程序僅適用於IE。但是,我確信這種方法應該適用於任何瀏覽器,因爲我們在這裏不使用任何奇特的技術..我們只是讓JavaScript對象駐留在母版頁中。 – RameshVel 2009-09-24 09:17:16

+0

這種方法的問題在於,瀏覽器的地址欄會一直顯示「基本頁面」的URL,這使普通用戶無法爲他實際查看的任何頁面添加書籤。 – 2009-09-24 09:17:53

2

較新的瀏覽器支持DOM storage,它允許您存儲可以在頁面之間保留的任意數據。您還可以使用隱藏的Flash應用程序來記住事情。有像Dojo Storage這樣的庫處理你的檢測,所以你只需保存你的數據,它會使用任何可用的。

它不會自動保存下一頁的所有Javascript變量 - 您需要添加onunload處理程序來存儲用戶離開頁面時所需的內容。

+0

+1非常有趣的鏈接! – Alex 2009-09-24 09:18:07

5

只要添加到尼克的答案,不同的瀏覽器支持這種或那種持久存儲的想法。過去一年來,爲所有瀏覽器進行了一系列的規範化工作。

Here's one library,圍繞HTML 5的DOM存儲包,微軟的UserData,會話cookie和window.name(使用JSON序列作爲window.name canonly store strings)。 (它實際上在Opera 9+,IE6 +,Firefox 1.5+,Safari [3我認爲)中起作用)。

這是jQuery plugin,它使用.swf(閃存)文件提供最多的跨瀏覽器支持(儘管它支持原生解決方案,如果您配置它)。我不能擔保,但應該提到這個jQuery-lovin'社區。

+0

非常好的和有用的鏈接! +1 – Alex 2009-09-24 20:57:01

+0

尼斯鏈接。很好的發現jQuery插件 - 我是一個jQuery風扇,所以我會親自給它一個去。 – Nick 2009-09-29 15:52:11

0

一種可能性是使用一個框架,並保持目標在那裏,另一它們序列化,並通過任一

window.name 
document.cookie 
location.search 

document.cookie持久化數據到頁面調用之間的數據存儲在相同的正規途徑域並提供控制訪問和生命週期的機制。

如果您使用window.name,則數據會在瀏覽器實例的整個生命週期內持續存在。

使用window.location比較棘手,您必須明確修改鏈接以發送數據(可以使用事件委託輕鬆完成)。

相關問題