Почему jQuery cookie не устанавливает cookie?
Я разрабатываю приложение, используя jQuery, который использует файлы cookie. Сейчас он находится на application.html
на рабочем столе моего ПК.
Однако я не могу хранить и извлекать файлы cookie. Я включил jquery-1.7.1.min.js
, json2.js
и jquery.cookie.js
в свой HTML файл в этом порядке.
Вот как я храню файл cookie в течение 7 дней:
$.cookie("people", JSON.stringify(people_obj_array), {expires: 7});
Глобальный массив people_obj_array
выглядит как
[
{
"name": "Adam",
"age": 1,
},
{
"name": "Bob",
"age": 2,
},
{
"name": "Cathy",
"age": 3,
},
]
Когда я тестирую шифрование JSON с помощью alert(JSON.stringify(people_obj_array))
, он выглядит нормально:
![JSON test]()
Однако, когда я получаю этот файл cookie с помощью:
alert($.cookie("people"));
перед тем, как даже обновить страницу, появится предупреждение, которое будет читать "null". Должен ли текст быть предупреждающей строкой JSON? Я правильно использую библиотеку файлов JQuery?
Чтобы уточнить, вот как я тестирую:
$.cookie("people", JSON.stringify(people_obj_array), {expires: 7}); // store
alert($.cookie("people")); // attempt to retrieve
У меня есть Firebug, и я готов выполнить некоторые тесты консоли.
Ответы
Ответ 1
Вероятно, файл на вашем рабочем столе вызывает проблему. Браузеры обычно ведут себя, обслуживая файлы cookie на основе домена, из которого они были получены, и их пути.
Возможно, вы не сможете прочитать файл cookie сразу после его установки: Написание файла cookie включает в себя настройку заголовков в HTTP-запросе, а также их чтение включает заголовки чтения в ответе HTTP.
Попробуйте разместить свою страницу на веб-сервере и посмотреть, работает ли это для вас.
Ответ 2
Если у вас возникли проблемы с плагином cookie, почему бы не просто создать свои собственные функции cookie? Чтение, запись и (необязательное) удаление.
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);
};
Я не могу комментировать конкретный плагин, поскольку я его никогда не использовал. Однако эти функции все работают и были протестированы.
Итак, для вашего примера:
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.
Ответ 3
Из моего исследования jquery.cookie.js
довольно старый и, похоже, он больше не поддерживается. Возможно, вам удастся вместо этого использовать эту библиотеку. Его описание в Google Code - "Библиотека файлов Javascript с привязкой jQuery и поддержкой JSON" и включает в себя методы для всего, что вы пытаетесь сделать!