2011-11-21 26 views
7

Tôi đang cố gắng phân tích chuỗi JSON được lưu trữ bên trong giá trị cookie mà mã Rails của tôi đang gọi.Phân tích chuỗi JSON trong Rails từ Cookie được tạo bởi JavaScript

Đường ray có thể đọc chuỗi cho đến khi dấu phẩy (',') tách hai cặp khóa: giá trị khác nhau trong chuỗi.

JavaScript:

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

Cookie:

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

Rails:

@cookievalue = cookies[:cookiename] 

Rails khi gọi @cookievalue trong một ERB <% = @cookievalue%> đánh giá nó như:

{"key1":v1 

bất kỳ nội dung nào vượt quá dấu phẩy (',') tách biệt key1: v1, key2: v2 bị thiếu.

Bất kỳ ý tưởng nào?

Tôi đã thử nội dung này dưới dạng văn bản thẳng và nó giống với dấu phẩy đầu tiên mà nó gặp phải.

CẬP NHẬT Trả lời câu hỏi của riêng tôi bên dưới - cần thiết để thoát khỏi dấu phẩy tách các giá trị bằng cách sử dụng mã hóa() trong JS.

Trả lời

7

Dấu phẩy không phải là ký tự hợp lệ (rõ ràng là tôi đã xem qua phần này) và như vậy nó đã xóa mọi thứ sau nó.

CẬP NHẬT FIX:

thêm một encodeURIComponent() để JavaScript:

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

này thoát khỏi nhân vật đúng cách và vượt qua định dạng chuỗi JSON để máy chủ của tôi đúng. Cũng được sử dụng encodeURIComponent() thay vì mã hóa() vì các ký tự Châu Á hoặc Châu Á không mã hóa đúng với mã hóa().

Server side thay đổi (Không bắt buộc):

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

này cho phép tôi để phân tích chuỗi JSON một chút dễ dàng hơn một lần lấy ra từ Cookie [: cookiename]

Fix trước:

thêm một mã hóa() vào JavaScript:

document.cookie = "cookiename="+encode(JSON.stringify(obj)); 
Các vấn đề liên quan