6

如何通过url传递一个js对象

我有一个 js 对象

var info = {
    status: 1 ,
    time: "10:00:00-12:00:00" ,
    weekdays: {
      "monday",
      "tuesday"
    }
};

不想使用序列化,我想要“localhost/jstest/#test?info”之类的东西

有什么办法可以做到这一点

4

3 回答 3

5

您将不得不以一种或另一种方式对其进行序列化。您可以按照您建议的方式执行此操作,方法是将表示您的对象的 JSON 字符串存储在 egsessionStorage中,并传递密钥的名称:

sessionStorage.setItem("info", JSON.stringify(info));
window.location("localhost/jstest/#test?info");

然后,您可以访问存储在该密钥中的数据:

var info = JSON.parse(sessionStorage.getItem("info"));
于 2012-06-16T11:28:12.300 回答
1

您可以使用主题标签创建自己的查询字符串,然后从代码中的 url/hashtag 获取数据以检索数据。

像这样:

localhost/jstest/#info!status=1!time=10:00:00-12:00:00!weekdays=monday,tuesday

然后,您可以在此处找到有关如何读取主题标签数据的更多帮助:Working with single page website and maintain state using a URL hash and jQuery

于 2012-06-16T11:29:14.250 回答
0

这是我的解决方案。在这里,您首先将对象转换为 JSON,然后使用 base64 编码使该字符串安全,以便在 URL 中使用。请注意,这使用了一个额外的插件jquery.base64.js来处理 base64。您可以使用自己的库。

function packer(o){
    var str = JSON.stringify(a);
    var mess = $.base64.encode(str);
    return mess.replace(/\+/g,'-').replace(/\//g,'_').replace(/=/g,',');
}
function unpacker(str){
    var mess  = str.replace(/-/g,'+').replace(/_/g,'/').replace(/,/g,'=');
    mess = $.base64.decode(mess);
    return JSON.parse(mess);
}

于 2021-04-25T02:13:43.187 回答