Почему 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" и включает в себя методы для всего, что вы пытаетесь сделать!