2013-02-09 55 views
-1

我想將屬性添加到對象並將該對象傳遞給另一個頁面。如何在多個頁面上使用一個JavaScript對象?

+0

也許你正在尋找[' localStorage'](https://developer.mozilla.org/en-US/docs/DOM/Storage)? – 2013-02-09 06:28:33

+0

他回答了他自己的問題@Jack haha​​h:P他發佈給其他人 – 2013-02-09 06:29:00

回答

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 
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; 
} 

假設我們從第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?

+0

如果你想保持你的網址乾淨,你可以使用cookie。 – mika 2013-02-09 06:28:21

+1

請記住,如果您想將對象放入函數中,這會失敗,因爲您將對象序列化爲JSON,並且JSON僅支持數據。 – KaeruCT 2013-02-09 06:33:26

+0

不錯的努力,但不理想。 url限制怎麼樣?那麼,你放棄了大件物品?我會去當地的存儲 – allenhwkim 2013-02-09 06:53:31

相關問題