2012-01-29 45 views
11

Tôi đang phát triển một ứng dụng bằng jQuery sử dụng cookie. Ngay bây giờ, nó nằm ở application.html trên máy tính để bàn PC của tôi.Tại sao cookie jQuery không thực sự đặt cookie?

Tuy nhiên, tôi không thể lưu trữ và truy lục cookie. Tôi đã bao gồm jquery-1.7.1.min.js, json2.jsjquery.cookie.js trong tệp HTML của tôi theo thứ tự đó.

Dưới đây là cách tôi đang lưu trữ một cookie sẽ kéo dài trong 7 ngày:

$.cookie("people", JSON.stringify(people_obj_array), {expires: 7}); 

Mảng toàn cầu people_obj_array trông giống như

[ 
     { 
      "name": "Adam", 
      "age": 1, 
     }, 
     { 
      "name": "Bob", 
      "age": 2, 
     }, 
     { 
      "name": "Cathy", 
      "age": 3, 
     }, 
    ] 

Khi tôi kiểm tra mã hóa JSON với alert(JSON.stringify(people_obj_array)), có vẻ tốt đẹp:

JSON test

Tuy nhiên, khi tôi truy xuất cookie này qua:

alert($.cookie("people")); 

trước khi làm mới trang, một cảnh báo bật lên có nội dung là "null". Không phải văn bản là chuỗi JSON cảnh báo phải không? Tôi có đang sử dụng thư viện cookie JQuery chính xác không?


Chỉ cần làm rõ, đây là cách tôi đang thử nghiệm:

$.cookie("people", JSON.stringify(people_obj_array), {expires: 7}); // store 
alert($.cookie("people")); // attempt to retrieve 

Tôi có Firebug, và tôi sẵn sàng để làm một số xét nghiệm Console.

+2

Tôi nghĩ vấn đề là cơ chế cookie không được định nghĩa cho các tập tin trên đĩa địa phương. Bạn đã thử thiết lập máy chủ web cục bộ và phân phát tệp của mình dưới dạng 'http: // localhost/application.html' chưa? –

+0

Cảm ơn! Tôi đã chỉ sử dụng bộ nhớ cục bộ. Nó đơn giản hơn nhiều và hoạt động cả cục bộ lẫn trên máy chủ web. Nhược điểm là, tất nhiên, các trình duyệt cũ không hỗ trợ nó, điều đó tốt cho tôi. http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/ – dangerChihuahua007

Trả lời

11

Có thể thực tế là tệp trên máy tính của bạn đang gây ra sự cố. Các trình duyệt thường hoạt động bằng cách phân phát cookie dựa trên tên miền mà chúng đã nhận được và đường dẫn của chúng.

Bạn có thể không đọc được cookie ngay sau khi cài đặt: Viết cookie liên quan đến việc đặt tiêu đề trong yêu cầu HTTP và đọc tương tự như đọc tiêu đề trong phản hồi HTTP.

Thử lưu trữ trang của bạn trên máy chủ web và xem điều đó có hiệu quả với bạn hay không.

+0

Cảm ơn, tôi đã lưu trữ trang web trên máy chủ web công cộng và cookie hoạt động. Trang này có thêm chi tiết: http://code.google.com/p/chromium/issues/detail?id=535 – dangerChihuahua007

+1

@DavidFaux có vẻ như bạn đang sử dụng Chromium, vì vậy tôi có thể giả sử bạn cũng đang sử dụng linux ... well nếu bạn muốn thiết lập một máy chủ web cục bộ để thử nghiệm, bạn có thể 'sudo apt-get install lamp-server ^' sau đó 'sudo adduser www-data', sau đó là hai lệnh sau đây. 'sudo chown -R www-dữ liệu: www-data/var/www' và' sudo chmod -R g + rw/var/www' chỉ cần làm điều đó! sau đó tất cả các dev web của bạn đi trong '/ var/www' và bạn kiểm tra bằng cách điều hướng đến http: // localhost/ – rlemon

+0

cảm ơn câu trả lời :) –

1

Từ nghiên cứu của tôi jquery.cookie.js là khá cũ và không dường như được duy trì lâu hơn nữa. Bạn có thể có may mắn hơn bằng cách sử dụng this library thay thế. Mô tả của nó trên Google Code là "Thư viện Cookie Javascript với các ràng buộc jQuery và hỗ trợ JSON", và bao gồm các phương pháp cho mọi thứ bạn đang cố gắng làm!

+0

Cảm ơn, tôi sẽ ghi nhớ điều này. – dangerChihuahua007

+0

Cập nhật lần cuối của jquery.cookie là 7 ngày trước, vào ngày 2013-09-11. Chúng tôi đang sử dụng thành phần đó rất hữu ích. – foxontherock

+0

Có thể là họ đã chọn phát triển trở lại. Khi tôi đưa ra nhận xét này, thư viện đã không được cập nhật trong hơn 2 năm. – daniel0mullins

2

Nếu bạn gặp khó khăn với plugin cookie, tại sao không chỉ tạo nên các chức năng cookie của riêng bạn? Đọc, Viết và (tùy chọn) xóa.

var createCookie = function(name, value, days) { 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
     var expires = '; expires=' + date.toGMTString(); 
    } 
    else var expires = ''; 
     document.cookie = name + '=' + value + expires + '; path=/'; 
}; 
var readCookie = function(name) { 
    var nameEQ = name + '='; 
    var ca = document.cookie.split(';'); 
    for (var i = 0; i < ca.length; i++) { 
     var c = ca[i]; 
     while (c.charAt(0) == ' ') c = c.substring(1, c.length); 
     if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); 
    } 
    return null; 
}; 
var eraseCookie = function(name) { 
    createCookie(name, '', -1); 
}; 

Tôi không thể nhận xét về plugin cụ thể như tôi chưa từng sử dụng. Tuy nhiên, tất cả các chức năng này đều hoạt động và đã được thử nghiệm.

Vì vậy, ví dụ bạn:

createCookie("people", JSON.stringify(people_obj_array), 7); // store 
alert(readCookie("people")); // retrieve 
eraseCookie("people"); // remove 
alert(readCookie("people")); // oo look i'm no longer here. 
+1

Chắc chắn điều này làm việc cho các trang web trên đĩa địa phương? AFAIK một số trình duyệt không xử lý các cookie cục bộ. –

+1

Tôi chưa thử nghiệm trường hợp đó .. tuy nhiên nếu cookie không có sẵn cục bộ, giả sử OP đang sử dụng trình duyệt hiện đại * bộ nhớ cục bộ * sẽ hoạt động .. – rlemon

+0

Cảm ơn! Bộ nhớ cục bộ đang hoạt động rực rỡ. Nó quá đơn giản. http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/ – dangerChihuahua007