如何通过url传递一个js对象
我有一个 js 对象
var info = {
status: 1 ,
time: "10:00:00-12:00:00" ,
weekdays: {
"monday",
"tuesday"
}
};
我不想使用序列化,我想要“localhost/jstest/#test?info”之类的东西
有什么办法可以做到这一点
您将不得不以一种或另一种方式对其进行序列化。您可以按照您建议的方式执行此操作,方法是将表示您的对象的 JSON 字符串存储在 egsessionStorage
中,并传递密钥的名称:
sessionStorage.setItem("info", JSON.stringify(info));
window.location("localhost/jstest/#test?info");
然后,您可以访问存储在该密钥中的数据:
var info = JSON.parse(sessionStorage.getItem("info"));
您可以使用主题标签创建自己的查询字符串,然后从代码中的 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
这是我的解决方案。在这里,您首先将对象转换为 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);
}