2011-11-21 23 views
7

Rails kodumun çağırdığı bir çerez değerinde saklanan bir JSON dizesini ayrıştırmaya çalışıyorum.Cookie'den Rails'ten JSON dizesini ayrıştırma JavaScript tarafından oluşturuldu

Raylar, dizgede iki farklı anahtar: değer çiftini ayıran virgül (',') olana kadar dizeyi okuyabilir.

JavaScript:

var value1 = "v1"; 
var value2 = "v2"; 
var obj = { key1: value1, key2: value2 }; 
document.cookie = "cookiename="+JSON.stringify(obj); 

çerez:

Name: cookiename 
Content: {"key1":v1,"key2":v2} 

Raylar:

@cookievalue = cookies[:cookiename] 

Raylar bir erb içinde @cookievalue çağrı <% = @cookievalue%> o olarak değerlendirilir:

anahtar1: v1, anahtar 2'yi ayıran virgül (',') öğesinden sonra: v2 eksik.

Herhangi bir fikrin var mı?

Bunu düz metin olarak denedim ve karşılaştığı ilk virgülle aynı şeyi yapar.

GÜNCELLEME Yanıtlanmış aşağıda kendi soru - JS bir kodlama yapın() kullanarak değerlerini ayırarak virgül kaçmak gerekiyordu.

cevap

7

Virgül, geçerli bir karakter değil (bunu açıkça gördüm) ve bundan sonra her şeyi bıraktı.

GÜNCELLEME FIX: karakterler düzgün

document.cookie = "cookiename="+encodeURIComponent(JSON.stringify(obj)); 

Bu kaçar ve düzgün benim sunucuya JSON biçimli dize geçer:

JavaScript bir encodeURIComponent() eklendi. Ayrıca kodlama() ile kodlamayan Asya veya Asya karakterleri nedeniyle encode() yerine encodeURIComponent() kullanılır.

Sunucu tarafı değişiklik (İsteğe bağlı):

@cookievalue = JSON.parse(cookies[:cookiename]) 

Bu bana biraz daha kolay kez çerez alınan JSON dizesi ayrıştırmak için izin verir [: cookiename]

Önceki Fix

:

eklenen kodlamak() için JavaScript'e: