我想将javascript对象从一个页面传递到另一个页面,这样任何人都可以告诉我该怎么做?
使用jQuery可以这样做吗?
答案 0 :(得分:15)
服务器端回发
在页面上放置一个POST表单并将序列化对象保存在隐藏的输入中,然后将其发布到另一页面。您将能够在服务器上处理该数据,并且很可能以某种方式将其放回到页面中。无论是javascript对象还是其他任何东西。
客户端网址检查
通过将序列化对象附加到网址,向其他页面发出GET请求:
http://www.app.com/otherpage.xyz?MyObject=SerializedData
其他页面可以轻松解析其网址并使用Javascript反序列化数据。
window.name
=本地跨网页会话中的内容
这是一种特殊的技术,也在special javascript library中用于将window.name
公开为字典,因此您可以将许多不同的对象保存到其中并将其用作本地跨页面会话。它有一些可能会影响您的大小限制,但请检查链接页面并测试您的浏览器。
HTML5本地存储空间
HTML5具有本地存储功能,您可以将其用于这些目的。但是使用它很大程度上取决于您的浏览器要求现代浏览器支持它,即使在重新启动浏览器或计算机后也可以恢复数据......
<强>缓存强>
您可以随时使用Cookie,但可能会遇到其限制。如今,cookie不是最佳选择,即使它们能够保存比当前窗口会话更长的数据。
在某些大写情况下,您当然必须在客户端使用某种(de)序列化程序。反序列化器很容易找到(jQuery已经包含了一个很棒的函数$.getJSON()
),并且很可能已经成为当前javascript库的一部分(甚至不提eval()
)。
但是对于JSON字符串序列化的对象,我建议json2.js library推荐John Resig。该库使用浏览器内实现的JSON(反)序列化功能(如果存在)或使用它自己的实现(如果它们不存在)。因此推荐。
答案 1 :(得分:4)
只有当页面同时存在,并且从另一个页面打开一个页面以便您引用其他页面的windows对象时,才可能这样做。
如果您从一个页面导航到另一个页面,它们不会同时存在,因此您无法像这样进行通信。您必须将对象序列化为可以在请求中发送的字符串,例如在查询字符串中发送JSON。
有多种方法可以持久保存数据,例如查询字符串,发布数据,Cookie,窗口名称或HTML5本地存储,但所有这些方法只能保留字符串值,而不是Javascript对象。
答案 2 :(得分:2)
这是可行的,你有几个选择。
本地存储
可以在任何阶段添加/编辑/删除,也可以跨域访问。 (在ie6和ie7中本身不起作用,但是有解决办法)
窗口对象
我会围绕这个不是最好的解决方案,但它根本不安全,所以只能用于不需要保密的东西。 window.name = { "json" : "object"}
,然后在window.name属性的以下页面中提供。
答案 3 :(得分:1)
我认为将javascript对象从一个页面传递到另一个页面的唯一方法是将其序列化为字符串并将其传递给url。例如,如果你有对象
var temp = { id: 1, value: 'test' }
您可能希望使用JSON-js对其进行序列化并将其传递给例如http://mysite.com/?data=serialization
。然后在加载页面后,您需要通过例如$.parseJSON()
进行反序列化。
答案 4 :(得分:1)
如果您的应用程序使用会话,您可以将其序列化(根据其他答案),然后将其POST到服务器,并将其存储在会话变量中。在下一页中,您将从会话变量中检索它。
答案 5 :(得分:0)
在Javascript中,通常所有变量仅存在于该页面加载唯一的范围内。如果有新页面加载,它们不会在不同页面之间保留。
例外情况是
Cookie 是真正的跨浏览器,但在尺寸方面非常有限。您不应期望能够可靠地为页面存储超过4kB的cookie;实际上你可能不应该使用超过1kB。 Cookie数据会减慢每个页面和其他请求的加载速度,因此应谨慎使用它。
Javascript可以使用各种类型的本地存储,但唯一实用的跨浏览器实现是HTML5 webstorage,它在所有现代浏览器中实现(IE8 +,FF,Chrome ,Safari等),但显然没有在IE6或IE7中实现,如果这很重要。
这两种方法都可以在用户的浏览器中存储一个值,该值可以保持持久性,以便可以通过同一站点的页面写入和读取,甚至可以在页面视图之间(甚至通常在浏览器会话之间)或计算机重启)。
答案 6 :(得分:0)
我写了一个library some time ago,它可以将大多数js对象存储到localstorage。例如,原型类的实例,包含对其他对象的引用,包括自引用。请记住,IE支持是乏善可陈的。