2009-09-24 56 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比较棘手,您必须明确修改链接以发送数据(可以使用事件委托轻松完成)。

相关问题