jquery json veri nesnesini çereze kaydet


108

JSON verilerini bir çereze nasıl kaydederim?

JSON verilerim buna benziyor

$("#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'});

Ve şöyle bir şey yapmak istiyorum

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

ve veri almak için ben içine yüklemek istediğiniz $("#ArticlesHolder")gibi

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

doğru yolda olup olmadığımı bilen var mı yoksa bu başka bir şekilde mi yapılmalı? Basitçe söylemek gerekirse, json verilerini bir çerezden nasıl koyar ve çekerim?


8
Bilgiçlik taslıyorum ama sorunuzda "JSON verisi" yok. Nesne değişmez gösterimi aracılığıyla tanımladığınız bazı JavaScript nesneleriniz var (JSON değil, JSON, nesne değişmez gösteriminin bir alt kümesidir), ancak burada JSON yoktur. json.org Nesnelerinizi tanımlama bilgisi dizesinde saklamak için veri formatı olarak neredeyse kesinlikle JSON kullanmak istiyorsunuz .
TJ Crowder

Yanıtlar:


195

Verileri JSON olarak şu şekilde serileştirebilirsiniz:

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

Daha sonra çerezden almak için:

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

Bu dayanıyor JSON.stringify()veJSON.parse() serialize için / (IE <8) dahil eski tarayıcılar için, veri nesne deserialize json2.js almak için JSONişlevsellik. Bu örnek, jQuery çerez eklentisini kullanır


2
Eski zamanlardan beri Opera çerezlerinde JSON'a izin verilmiyor my.opera.com/community/forums/… Ben de bu hatayı alıyorum. @ Cookie @ eklentisi @ encodeURIComponent @ kullansa bile, pbug görünmemelidir.
kirilloid

1
Bu soru ve cevap cookie, bunun jQuery'de yerleşik bir işlev olduğuna inanmamı sağladı . Öyle görünmüyor. yoksa kullanımdan kaldırıldı mı ..? bulduğum eklentilerse, karışıklığı önlemek için ona bağlantı vermek harika olur ...
TJ

1
@TJ Aslında bir eklenti, jQuery çerez eklentisidir. Burada bulabilirsiniz: plugins.jquery.com/cookie Bu noktada neden özünde olmadığını gerçekten merak ediyorum ...
Nick Craver

Bunu bazı tarayıcılarda kullanırken dikkatli olun. ,(Virgül) karakteri değil çerezler safari ve diğer tarayıcılar içinde doğru ayarlanmalıdır neden olabilir.
Matt Seymour

JQuery istenmiyorsa, bu harika hafif çerez kitaplığını da kullanabilirsiniz. [ developer.mozilla.org/en-US/docs/Web/API/document/cookie] lib
RyBolt

40

Artık JSON.stringifyaçıkça kullanmaya gerek yok zaten . Sadece bu kod satırını çalıştırın

$.cookie.json = true;

Bundan sonra, çerezi okurken otomatik olarak JSON'a ve JSON'dan geri dönüştürülecek olan çerezdeki herhangi bir nesneyi kaydedebilirsiniz.

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

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

Ancak JSON kitaplığı jquery.cookie ile gelmez, bu nedenle kendiniz indirmeniz ve jquery.cookie.js'den önce html sayfasına eklemeniz gerekir.


3
Bu yaklaşımı $ .cookie.json = true olmadan denedim ve tanımlama bilgisi değerim olarak [nesne nesnesi] aldım. Daha sonra bunu true olarak ayarlayın ve nesneyi doğrudan çereze iletmeye çalışın ve hiçbir çerez doldurulmadı.
JacobRossDev

@ jacobross85 Sanırım bazılarımız jquery.cookie.js'nin eski bir sürümünü kullanıyor olabilir, lütfen kaynak kodunu kontrol edin, bazen yanlış dosya etkin.
Dexter

Lütfen bunun çerezlerin evrensel olarak JSON olarak değerlendirilmesine neden olacağını unutmayın. Sonuç olarak, körü körüne ekleme $cookie.json = true, diğer tanımlama bilgilerinizle çakışmalara neden olabilir. Bu nedenle, çerezleri zaten başka bir yerde kullanan bir projede bunu kullanırken dikkatli olun!
Eric Tjossem

karmaşık json için herhangi bir çözümünüz var mı?
json'umda

7

JSON.stringify(userData)json nesnesini dizeye örtmek için kullanın .

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

ve çerez kullanımından geri dönmek için JSON.parse()

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

4

JSON.stringify(userData)Bir çerezden döndürülen değeri kaydetmek iyi bir uygulama değildir ; bazı tarayıcılarda bir hataya neden olabilir.

Kullanmadan önce, onu base64'e (kullanarak btoa) ve okurken, base64'ten (kullanarak atob) dönüştürmelisiniz .

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

write_cookie(val)

3
Bununla sorun yaşayan bir tarayıcıya referansınız var mı?
Marthin

1
django platformunda chrome'da çerez olarak jsons listesi kullanıyorum. bazı sorunları var. ayrıca, çerez tarafından iletilen gerçek verileri kullanıcıdan gizlemek her zaman daha iyidir
Eyal Ch

1
Sunucu tarafında, Python'un standart çerez kullanımı , çerez başlığında reddedilen çerezi izleyen çerezleri içeren çerezleri reddeder {veya }sessizce bırakır.
snakecharmerb

2

Verileri JSON ve Base64 olarak serileştirerek, bağımlılık 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

Bunu deneyin: https://github.com/tantau-horia/jquery-SuperCookie

Hızlı Kullanım:

oluştur - çerez oluştur

kontrol et - varlığını kontrol et

doğrula - JSON ise çerez değerini doğrula

check_index - JSON'da indeksin mevcut olup olmadığını doğrulayın

okuma_değerleri - çerez değerini dizge olarak okur

read_JSON - çerez değerini JSON nesnesi olarak okur

read_value - JSON nesnesinde depolanan dizinin değerini okur

replace_value - JSON nesnesinde depolanan belirli bir dizinden değeri değiştirin

remove_value - JSON nesnesinde depolanan değeri ve dizini kaldırır

Sadece kullan:

$.super_cookie().create("name_of_the_cookie",name_field_1:"value1",name_field_2:"value2"});
$.super_cookie().read_json("name_of_the_cookie");
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.