-1

我想向一个对象添加属性并将该对象传递给另一个页面。

4

2 回答 2

1

一些东西:

  1. 我会将函数组合在一个命名空间中;
  2. 你不需要 Base64 编码,因为encodeURIComponent()就足够了;
  3. 这不适合大型物体,您需localStorage要这样做;
  4. 您的代码有一些陷阱,例如当一个 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
于 2013-02-09T07:08:57.460 回答
0

放入全局 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;
}

假设我们正在从 page1 导航到 page2.. 在 page2 的 .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实现,请参阅:如何在 JavaScript 中将字符串编码为 Base64?

于 2013-02-09T06:25:44.953 回答