2012-07-05 18 views
30

कोई jQuery नहीं।शुद्ध जावास्क्रिप्ट - कुकी में स्टोर ऑब्जेक्ट

मैं कुकी में ऑब्जेक्ट या सरणी को स्टोर करना चाहता हूं।

पृष्ठ रीफ्रेश के बाद ऑब्जेक्ट उपयोग करने योग्य होना चाहिए।

मैं शुद्ध जावास्क्रिप्ट के साथ ऐसा कैसे करूं? मैंने कई पदों को पढ़ा, लेकिन उचित तरीके से क्रमबद्ध करने के बारे में नहीं जानते।


संपादित करें: कोड:

var instances = {}; 
... 
instances[strInstanceId] = { container: oContainer }; 
... 
instances[strInstanceId].plugin = oPlugin; 
... 
JSON.stringify(instances); 
// throws error 'TypeError: Converting circular structure to JSON' 
  1. मैं कैसे को क्रमानुसार करते instances?

  2. मैं कार्यक्षमता कैसे बनाए रख सकता हूं, लेकिन stringify के साथ क्रमबद्ध करने में सक्षम होने के लिए उदाहरण की संरचना बदल सकता हूं?

+4

[ 'JSON.stringify()'] (https: //developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify) इसे। – Matt

+0

ऑब्जेक्ट को जेसन में कनवर्ट करें और इसे कुकी में स्टोर करें। –

+0

'स्ट्रिंगफ़ाई' काम नहीं करता है। मुझे 'टाइप एरर: सर्कुलर स्ट्रक्चर को जेएसओएन में कनवर्ट करना' मेरा कोड है: 'var instances = {}; उदाहरण [strInstanceId] .plugin = oPlugin; ... ' – Patrick

उत्तर

45

कि एक लिखने का प्रयास करें

function bake_cookie(name, value) { 
    var cookie = [name, '=', JSON.stringify(value), '; domain=.', window.location.host.toString(), '; path=/;'].join(''); 
    document.cookie = cookie; 
} 

इसे ले पढ़ने के लिए:

function read_cookie(name) { 
var result = document.cookie.match(new RegExp(name + '=([^;]+)')); 
result && (result = JSON.parse(result[1])); 
return result; 
} 

इसे ले हटाने के लिए:

function delete_cookie(name) { 
    document.cookie = [name, '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.', window.location.host.toString()].join(''); 
} 

जटिल वस्तुओं/उदाहरणों को क्रमानुसार करने के लिए, क्यों नहीं लिख अपने उदाहरण में एक डाटा डंप समारोह:

+०१२३५१६४१०६१
function userConstructor(name, street, city) { 
    // ... your code 
    this.dumpData = function() { 
    return { 
     'userConstructorUser': { 
      name: this.name, 
      street: this.street, 
      city: this.city 
     } 
     } 
    } 

तो फिर तुम डंप डेटा, यह stringify, यह कुकी के लिए लिखते हैं, और अगली बार जब आप उपयोग करना चाहते हैं बस जाओ:

var mydata = JSON.parse(read_cookie('myinstances')); 
    new userConstructor(mydata.name, mydata.street, mydata.city); 
+0

पर अच्छा नोट धन्यवाद अगर मैं काम करने के लिए 'स्ट्रिंग' प्राप्त करता हूं तो बीमार इसके साथ जाऊं। क्या आप मेरी कोड समस्या देख सकते हैं? – Patrick

+0

JSON पूरे उदाहरणों को क्रमबद्ध नहीं कर सकता है, लेकिन आप इन उदाहरणों से किसी भी प्रासंगिक डेटा को क्रमबद्ध कर सकते हैं, और इन सहेजे गए डेटा के साथ उन्हें पुन: प्रारंभ कर सकते हैं। उदाहरण के लिए, आपके पास एक उदाहरण है जहां नाम = 'जॉन डो', आप उस उदाहरण पर एक फ़ंक्शन लिख सकते हैं जैसे {myinstance: {name: 'John Doe'}}, और फिर इस डेटा के साथ कन्स्ट्रक्टर को कॉल करें । इसके अलावा, आप जीएसरियललाइज़र को आजमा सकते हैं: http://www.onegeek.com.au/projects/javascript-serialization (उस पर अच्छी पोस्ट) लेकिन मैं इसके खिलाफ अनुशंसा करता हूं क्योंकि कुकीज आकार में सीमित हैं ... –

+0

। .. और एक कुकी बहुत बड़ी हो सकती है जिसके परिणामस्वरूप उपयोगकर्ता के लिए स्थायी साइट विफलता हो सकती है क्योंकि अपस्ट्रीम हेडर बहुत बड़ा है। मैंने अपनी पोस्ट संपादित की ताकि आप देख सकें कि मेरी टिप्पणी से मेरा क्या मतलब है। –

2

आप अपने विहित स्ट्रिंग प्रतिनिधित्व में अपने वस्तु को क्रमानुसार कर सकते हैं, और यह कहा स्ट्रिंग प्रतिनिधित्व से अपने वस्तु रूप में वापस unserialize सकते हैं, तो हाँ आप इसे एक कुकी में डाल सकते हैं।

3

या तो ऑब्जेक्ट की अपनी .toString() विधि का उपयोग करें यदि यह सार्थक क्रमिकरण या JSON.stringify() देता है। हालांकि, ध्यान दें कि कुकीज आमतौर पर लंबाई में सीमित होती हैं और बड़ी मात्रा में डेटा रखने में सक्षम नहीं होती हैं।

+0

कुकी लंबाई –

2

एक कुकी अनुकूलन वर्ग से: http://www.sitepoint.com/cookieless-javascript-session-variables/

आपको केवल कुकी में स्टोर करने के लिए आवश्यक चर सेट करने और प्राप्त करने की आवश्यकता है।

साथ

कार्य: पूर्णांक, स्ट्रिंग, सरणी, सूची, परिसर वस्तु

उदाहरण:

var toStore = Session.get('toStore'); 

if (toStore == undefined) 
    toStore = ['var','var','var','var']; 
else 
    console.log('Restored from cookies'+toStore); 

Session.set('toStore', toStore); 

कक्षा:

// Cross reload saving 
if (JSON && JSON.stringify && JSON.parse) var Session = Session || (function() { 
// session store 

var store = load(); 

function load() 
{ 
    var name = "store"; 
    var result = document.cookie.match(new RegExp(name + '=([^;]+)')); 

    if (result) 
     return JSON.parse(result[1]); 

    return {}; 
} 

function Save() { 
    var date = new Date(); 
    date.setHours(23,59,59,999); 
    var expires = "expires=" + date.toGMTString(); 
    document.cookie = "store="+JSON.stringify(store)+"; "+expires; 
}; 

// page unload event 
if (window.addEventListener) window.addEventListener("unload", Save, false); 
else if (window.attachEvent) window.attachEvent("onunload", Save); 
else window.onunload = Save; 

// public methods 
return { 

    // set a session variable 
    set: function(name, value) { 
     store[name] = value; 
    }, 

    // get a session value 
    get: function(name) { 
     return (store[name] ? store[name] : undefined); 
    }, 

    // clear session 
    clear: function() { store = {}; } 
}; 
})(); 
संबंधित मुद्दे