我正在开发一个小应用程序,我想让用户能够与他人分享。但是,使用AngularJS,整个应用程序在客户端运行。无法访问服务器(我需要)。
具体来说,有一个角度对象是共享配置的组成部分。有没有办法可以将这个对象完全变成一个字符串或者什么东西,允许我从所述字符串重新构建对象?
换句话说,我的(数组)对象如下所示:
// Variable number of objects stored in the array. 3 shown here.
var arrayObj = [
{prop1: "something", prop2: "other", prop3: "other"},
{prop1: "something", prop2: "other", prop3: "other"},
{prop1: "something", prop2: "other", prop3: "other"}
]
我可以将整个数组对象转换为字符串,例如jn2340932rnxmclxm3290rj23ionqopdfsd923h413
,以便我可以将其放入URL中:
http://mysite.me/jn2340932rnxmclxm3290rj23ionqopdfsd923h413
然后在JavaScript中重新构建相同的对象?我该如何重建它?
答案 0 :(得分:1)
基于以下SO答案: https://stackoverflow.com/a/3776796/648350(它提到了atob和btoa的浏览器限制)
您可以使用base64对字符串化后的json对象进行编码和解码。
你会做类似的事情:
extractObject = function(str){
return JSON.parse(atob(str));
}
makeShareableString = function(obj){
return btoa(JSON.stringify(obj));
}
var test = {"this":"that","foo":"bar"};
makeShareableString(test);
// returns "eyJ0aGlzIjoidGhhdCIsImZvbyI6ImJhciJ9"
extractObject("eyJ0aGlzIjoidGhhdCIsImZvbyI6ImJhciJ9");
// returns {"this":"that","foo":"bar"}
值得一提的是,base64编码的字符串几乎总是比JSON.stringify'd字符串长度大得多。
我倾向于认为JSFiddle的共享方式是生成UUID(请参阅此答案https://stackoverflow.com/a/105074/648350),然后将数据存储在数据库中。这个UUID可能只是为了阻止刮刀简单地增加一个数字并锤击他们的系统,如果他们只是在url字符串中使用数据库行id。但如果我提供
,这不会是纯 js解决方案答案 1 :(得分:1)
将其变为字符串并将其编码为base 64字符串 webtoolkit base 64 js
然后
var arrayObj = [
{prop1: "something", prop2: "other", prop3: "other"},
{prop1: "something", prop2: "other", prop3: "other"},
{prop1: "something", prop2: "other", prop3: "other"}
]
var str = JSON.stringify(arrayObj);
var encodeString = Base64.encode(str)
一旦发送,您可以将其解码回使用
Base64.decode(str);