jquery कुकी में json डेटा ऑब्जेक्ट को सेव करता है


108

मैं कुकी में JSON डेटा कैसे बचा सकता हूं?

मेरा JSON डेटा ऐसा दिखता है

$("#ArticlesHolder").data('15', {name:'testname', nr:'4',price:'400'});
$("#ArticlesHolder").data('25', {name:'name2', nr:'1', price:'100'});
$("#ArticlesHolder").data('37', {name:'name3', nr:'14', price:'60'});

और मैं कुछ ऐसा करना चाहता हूं

var dataStore = $.cookie("basket-data", $("#ArticlesHolder").data());

और डेटा पुनः प्राप्त करने मैं में लोड करना चाहते हैं $("#ArticlesHolder")की तरह

$.each($.cookie("basket-data"), function(i,e){
 $("#ArticlesHolder").data(i, e);
});

किसी को पता है कि मैं सही रास्ते पर हूँ या यह किसी अन्य तरीके से किया जाना चाहिए? सीधे शब्दों में कहें, मैं कुकी से जसन डेटा कैसे डालूं और कैसे खींचूं?


8
सिर्फ पांडित्यपूर्ण, लेकिन आपके प्रश्न में कोई "JSON डेटा" नहीं है। आपके पास कुछ जावास्क्रिप्ट ऑब्जेक्ट हैं जिन्हें आपने ऑब्जेक्ट शाब्दिक संकेतन के माध्यम से परिभाषित किया है (JSON नहीं, JSON ऑब्जेक्ट शाब्दिक संकेतन का एक सबसेट है), लेकिन वहां कोई JSON नहीं है। json.org आप लगभग निश्चित रूप से JSON का उपयोग कुकी स्ट्रिंग में अपनी वस्तुओं को संग्रहीत करने के लिए डेटा प्रारूप के रूप में करना चाहते हैं ।
टीजे क्राउडर

जवाबों:


195

आप इस तरह से JSON के रूप में डेटा को क्रमबद्ध कर सकते हैं:

$.cookie("basket-data", JSON.stringify($("#ArticlesHolder").data()));

फिर इसे कुकी से प्राप्त करने के लिए:

$("#ArticlesHolder").data(JSON.parse($.cookie("basket-data")));

इस पर निर्भर करता है JSON.stringify()औरJSON.parse() क्रमानुसार करने / अपने डेटा वस्तु deserialize, पुराने ब्राउज़र (आईई <8) शामिल हैं के लिए json2.js प्राप्त करने के लिए JSONकार्यक्षमता। यह उदाहरण jQuery कुकी प्लगइन का उपयोग करता है


2
प्राचीन काल से my.opera.com/community/forums/ के बाद से JSON को कूकीज के लिए अनुमति नहीं है । मेरे पास भी यह त्रुटि है। भले ही अगर @ कुकी @ प्लगइन @ एनकोडरिकॉमपेंटेंट @ का उपयोग करता है, तो pbug दिखाई नहीं देना चाहिए।
केरिलॉइड

1
यह सवाल और जवाब मुझे विश्वास है कि cookiejQuery में एक इनबिल्ट फ़ंक्शन है। ऐसा प्रतीत होता है कि नहीं। या यह पदावनत है ..? अगर यह मुझे लगता है कि प्लगइन्स है, तो इसे जोड़ना भ्रम से बचने के लिए बहुत अच्छा होगा ...
TJ

1
@TJ यह वास्तव में एक प्लगइन है, jQuery कुकी प्लगइन। आप इसे यहाँ पा सकते हैं: plugins.jquery.com/cookie मैं वास्तव में क्यों यह कोर में इस बिंदु पर नहीं है ...
निक Craver

कुछ ब्राउज़रों में इसका उपयोग करने से सावधान रहें। ,(अल्पविराम) चरित्र नहीं करने के लिए कुकीज़ को सही ढंग से सफारी और अन्य ब्राउज़रों में सेट हो सकता है।
मैट सीमोर

यदि jQuery नहीं चाहता है तो आप इस महान हल्के कुकी पुस्तकालय का उपयोग कर सकते हैं। [ developer.mozilla.org/en-US/docs/Web/API/document/cookie] lib
RyBolt

40

अब पहले से ही JSON.stringifyस्पष्ट रूप से उपयोग करने की कोई आवश्यकता नहीं है । बस कोड की इस लाइन को निष्पादित करें

$.cookie.json = true;

उसके बाद आप कुकी में किसी भी वस्तु को सहेज सकते हैं, जो कुकी को पढ़ते समय स्वचालित रूप से JSON और JSON से वापस आ जाएगी।

var user = { name: "name", age: 25 }
$.cookie('user', user);
...

var currentUser = $.cookie('user');
alert('User name is ' + currentUser.name);

लेकिन JSON लाइब्रेरी jquery.cookie के साथ नहीं आती है, इसलिए आपको इसे स्वयं डाउनलोड करना होगा और jquery.cookie.js से पहले html पेज में शामिल करना होगा


3
मैंने $ .cookie.json = true के बिना इस दृष्टिकोण की कोशिश की और मेरे कुकी मूल्य के रूप में [ऑब्जेक्ट ऑब्जेक्ट] प्राप्त किया। फिर इसे सही पर सेट करें और सीधे कुकी को ऑब्जेक्ट पास करने की कोशिश की और कोई भी कुकी पॉपुलेट नहीं हुई।
जैकबॉसदेव

@ jacobross85 मुझे लगता है कि यह संभव है कि हममें से कुछ लोग jquery.cookie.js के पुराने संस्करण का उपयोग कर रहे हों, कृपया स्रोत कोड की जांच करें, कभी-कभी गलत फ़ाइल सक्रिय होती है।
डेक्सटर

कृपया ध्यान दें कि इससे कुकीज़ को JSON के रूप में सार्वभौमिक रूप से माना जाएगा। नतीजतन, नेत्रहीन रूप से जोड़ने $cookie.json = trueसे आपके अन्य कुकीज़ के साथ संघर्ष हो सकता है। तो पहले से ही कुकीज़ का उपयोग करता है कि एक परियोजना पर इस का उपयोग कर सावधान रहें!
एरिक त्सोसेम

क्या आपके पास जटिल जोंस का कोई हल है? मेरे पास एक json सरणी है मेरे json में कुछ विशेषताएँ हैं जिनमें json और ....
nasim jahednia

7

JSON.stringify(userData)स्ट्रिंग के लिए गुप्त json वस्तु का उपयोग करें।

var dataStore = $.cookie("basket-data", JSON.stringify($("#ArticlesHolder").data()));

और कुकी के उपयोग से वापस पाने के लिए JSON.parse()

var data=JSON.parse($.cookie("basket-data"))

4

JSON.stringify(userData)कुकी से लौटाए गए मूल्य को बचाने के लिए यह अच्छा अभ्यास नहीं है ; यह कुछ ब्राउज़रों में बग को जन्म दे सकता है।

इसका उपयोग करने से पहले, आपको इसे आधार 64 (उपयोग btoa) में परिवर्तित करना चाहिए , और इसे पढ़ते समय, बेस 64 (उपयोग atob) से परिवर्तित करें ।

val = JSON.stringify(userData)
val = btoa(val)

write_cookie(val)

3
क्या आपके पास उस ब्राउज़र का संदर्भ है जो इससे परेशान है?
मार्थिन

1
मैं django प्लेटफ़ॉर्म पर क्रोम पर कुकी के रूप में jsons की एक सूची का उपयोग करता हूं। इसके कुछ मुद्दे हैं। इसके अलावा, उपयोगकर्ता से कुकी द्वारा पारित वास्तविक डेटा को छिपाने के लिए हमेशा बेहतर होता है
ईयाल च

1
सर्वर साइड पर पायथन के मानक कुकी हैंडलिंग युक्त कुकीज़ को अस्वीकार कर देंगे {या }, और चुपचाप किसी भी कुकी कुकी शीर्ष लेख में अस्वीकार कर दिया कुकी का पालन छोड़ देते हैं।
snakecharmerb

2

JSON और Base64 के रूप में डेटा को क्रमबद्ध करें, निर्भरता jquery.cookie.js:

var putCookieObj = function(key, value) {
    $.cookie(key, btoa(JSON.stringify(value)));
}

var getCookieObj = function (key) {
    var cookie = $.cookie(key);
    if (typeof cookie === "undefined") return null;
    return JSON.parse(atob(cookie));
}

:)


0

इसे आज़माएं: https://github.com/tantau-horia/jquery-SuperCookie

त्वरित उपयोग:

create - कुकी बनाएँ

check - चेक अस्तित्व

सत्यापित करें - JSON है तो कुकी मूल्य सत्यापित करें

check_index - सत्यापित करें कि क्या JSON में इंडेक्स मौजूद है

read_values ​​- स्ट्रिंग के रूप में कुकी मान पढ़ें

read_JSON - JSON ऑब्जेक्ट के रूप में कुकी मान पढ़ें

read_value - JSON ऑब्जेक्ट में संग्रहीत सूचकांक का मूल्य पढ़ें

प्रतिस्थापन_वल्यू - JSON ऑब्जेक्ट में संग्रहीत एक निर्दिष्ट इंडेक्स से मान को बदलें

remove_value - JSON ऑब्जेक्ट में संग्रहीत मान और इंडेक्स निकालें

महज प्रयोग करें:

$.super_cookie().create("name_of_the_cookie",name_field_1:"value1",name_field_2:"value2"});
$.super_cookie().read_json("name_of_the_cookie");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.