我想将属性添加到对象并将该对象传递给另一个页面。如何在多个页面上使用一个JavaScript对象?
回答
有几件事情:
- 我会在命名空间中组合功能;
- 你不需要Base64编码,因为
encodeURIComponent()
就足够了; - 这不适用于大型物体,因此您需要
localStorage
; - 你的代码有几个疑难杂症,比如当一个href已经包含一个
?
;
我已经重新设计它像这样:
DataTransferService = {
sendToUrl: function(obj, url, name) {
var value = JSON.stringify(obj);
name = name || 'data';
return url + (url.indexOf('?') === -1 ? '?' : '&') + name + '=' + encodeURIComponent(value);
},
receiveFromCurrentUrl: function(name) {
return receiveFromUrl(window.location.href, name);
},
receiveFromUrl: function(url, name) {
var value;
name = name || 'data';
url = url || window.location.href;
if ((value = this.getUrlParameter(name, url)) !== null) {
return JSON.parse(value);
}
},
getUrlParameter:function(name, url) {
var p, qs;
if ((p = url.indexOf('?')) === -1) {
return null;
}
qs = url.substr(p + 1).split('&');
for (var i = 0, len = qs.length; i != len; ++i) {
var pair = qs[i].split('=');
if (pair[0] === name) {
return decodeURIComponent(pair[1]);
}
}
return null;
}
};
要使用:
var obj = {
a: 123,
b: 456,
c: [1, 3, 5]
};
var url = DataTransferService.sendToUrl(obj, '/path/to/page');
// "/path/to/page?data=..."
location = url;
在接收页:
var obj = DataTransferService.receiveFromCurrentUrl();
// work with obj here
功能摆在全局js文件..
function GotoPage(relUrl) {
var json = JSON.stringify({param1:val1, param2:val2});
window.location.href = relUrl.concat('?data=').concat(Base64.encode(json));
}
function GetUrlVars() {
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
假设我们从第1页导航至第二页。在第2页的js文件,你会写:
var base64data = GetUrlVars()['data']
var jsondata = Base64.decode(base64data)
var data = JSON.parse(data);
var param1 = data.param1;
//do something with the objects properties
对于在Base64
实现见:How can you encode a string to Base64 in JavaScript?
如果你想保持你的网址干净,你可以使用cookie。 – mika 2013-02-09 06:28:21
请记住,如果您想将对象放入函数中,这会失败,因为您将对象序列化为JSON,并且JSON仅支持数据。 – KaeruCT 2013-02-09 06:33:26
不错的努力,但不理想。 url限制怎么样?那么,你放弃了大件物品?我会去当地的存储 – allenhwkim 2013-02-09 06:53:31
也许你正在寻找[' localStorage'](https://developer.mozilla.org/en-US/docs/DOM/Storage)? – 2013-02-09 06:28:33
他回答了他自己的问题@Jack hahah:P他发布给其他人 – 2013-02-09 06:29:00