如何将javascript对象从一个页面传递给另一个页面

我想将javascript对象从一个页面传递到另一个页面,这样任何人都可以告诉我该怎么做?

使用jQuery可以这样做吗?

很少的方式

  1. 服务器端回发

    在页面上有一个POST表单,并将序列化对象保存在隐藏的输入中,然后将其发布到另一页。 您将能够在服务器上处理该数据,并且很可能以某种方式将其放回到页面中。 无论是javascript对象还是其他任何东西。

  2. 客户端URL检查

    通过将序列化对象附加到URL,向其他页面发出GET请求:

    http://www.app.com/otherpage.xyz?MyObject=SerializedData

    然后, 其他页面可以轻松解析其URL并使用Javascript反序列化数据。

  3. window.name =本地跨页面会话中的内容

    这是一种特殊的技术,也用于将window.name公开为字典的特殊javascript库 ,因此您可以将许多不同的对象保存到其中并将其用作本地跨页面会话。 它有一些可能会影响您的大小限制,但请检查链接页面并测试您的浏览器。

  4. HTML5本地存储

    HTML5具有本地存储的function,您可以将其用于这些目的。 但是使用它很大程度上取决于您的浏览器要求 现代浏览器支持它,即使在重新启动浏览器或计算机后也可以恢复数据……

  5. cookies

    您可以随时使用Cookie,但可能会遇到其限制。 这些天cookie不是最好的选择,即使它们能够保存比当前窗口会话更长的数据。

Javascript对象序列化

在一些大写的情况下,你当然必须在客户端使用某种(de)序列化器。 反序列化器很容易找到(jQuery已经包含了一个很棒的函数$.getJSON() ),并且很可能是你当前的javascript库的一部分(甚至没有提到eval() )。

但是对于JSON字符串序列化的对象,我建议使用John Resig推荐的json2.js库 。 该库使用浏览器内实现的JSON(反)序列化function(如果存在)或使用它自己的实现(如果它们不存在)。 因此推荐。

只有当页面同时存在,并且从另一个页面打开一个页面以便您具有对其他页面窗口对象的引用时,才可能这样做。

如果您从一个页面导航到另一个页面,它们不会同时存在,因此您无法像这样进行通信。 您必须将对象序列化为可以在请求中发送的字符串,例如在查询字符串中发送JSON。

有不同的持久化数据的方式,如查询字符串,发布数据,cookie,窗口名称或HTML5本地存储,但所有这些方法只能持久化字符串值,而不是Javascript对象。

这是可能的,你有几个选择。

本地存储

可以在任何阶段添加/编辑/删除,也可以跨域访问。 (在ie6和ie7本身不起作用,但是有解决办法)

窗口对象

我会围绕这个不是最好的解决方案进行大规模的解决,它根本不是安全的,所以只能将它用于那些不需要保密的东西。 window.name = { "json" : "object"} ,然后在window.name属性的以下页面中提供。

我相信将javascript对象从一个页面传递到另一个页面的唯一方法是将其序列化为字符串并将其传递给url。 例如,如果你有对象

 var temp = { id: 1, value: 'test' } 

您可能希望使用JSON-j来序列化它并将其传递给例如http://mysite.com/?data=serialization 。 然后在加载页面后,需要通过例如$.parseJSON()对其进行反序列化。

如果您的应用程序使用会话,您可以将其序列化(根据其他答案),然后将其POST到服务器,并将其存储在会话变量中。 在下一页中,您将从会话变量中检索它。

在Javascript中,通常所有变量仅存在于该页面加载唯一的范围内。 如果有新页面加载,它们不会在不同页面之间保留。

例外情况是这样的

  1. cookies。
  2. 本地存储。

Cookie是真正的跨浏览器,但在大小方面非常有限。 您不应期望能够可靠地为页面存储超过4kB的cookie; 事实上,你可能不应该使用超过1kB。 Cookie数据会减慢每个页面和其他请求的加载速度,因此应谨慎使用。

Javascript有各种类型的本地存储 ,但唯一实用的跨浏览器实现是HTML5 webstorage ,它在所有现代浏览器(IE8 +,FF,Chrome,Safari等)中实现,但在IE6中显然没有实现或IE7,如果这很重要。

这两种方法都在用户的浏览器中存储一个值,可以使其持久化,以便可以从同一站点的页面写入和读取,甚至在页面视图之间(甚至通常在浏览器会话或计算机重新启动之间) )。

我前段时间写了一个库 ,可以将大多数js对象存储到localstorage。 例如,原型类的实例,包含对其他对象的引用,包括自引用。 请记住,IE支持是乏善可陈的。