Файл cookie не сохранен для сценария поиска сокровищ - PullRequest
2 голосов
/ 04 октября 2011

первый постер, долгое время читатель.

Так что мне нужно было создать быструю и простую охоту за сокровищами. Идея заключалась в том, чтобы сохранить некоторые значения в файле cookie и, когда пользователь щелкнет элемент с соответствующим идентификатором, обновить следующее значение. Это еще не там, но когда человек нашел все 8 (в данном случае), это вызовет что-то.

Теперь я понял, что это в основном работает, но я столкнулся с большой проблемой. Файл cookie не сохраняется от страницы к странице. Если я работаю с одной тестовой страницей, это нормально - файл cookie создается, значения извлекаются из него и помещаются в проверочный массив, а счетчик увеличивается правильно. Кроме того, когда файл cookie обновляется, новые значения сохраняются просто отлично.

Тем не менее, когда я перехожу на другую страницу и проверяю, нет ли файла cookie - он исчез. Теперь я проверил, действительно ли файл cookie был добавлен, и да, он есть. Но есть несколько файлов cookie с одним и тем же именем (они обновляют значения, но опять-таки, это только страница на страницу, поэтому нет кумулятивного эффекта).

Итак, я не понимаю, почему, когда я вызываю cookie и сбрасываю его, он не влияет на один cookie, а создает новый?

О, я использую jQuery 1.4.2 и плагин cookie jQuery.

// if not present create default array and store in cookie cookie
if($.cookie('treasure_hunt') == null) {

var treasure = new Array(
    "arteContactEn",0,
    "arteCorpEn",0,
    "arteServicesEn",0,
    "arteRoomsEn",0,
    "arteDiningEn",0,
    "artePackEn",0,
    "arteHotelEn",0,
    "arteHomeEn", 0
)
   $.cookie('treasure_hunt', treasure, { expires: 7 });
}

// capture cookie info
var treasureFound = $.cookie('treasure_hunt');

// create check array and parse values into it
var treasureCheck = new Array();
var treasureCheck = treasureFound.split(',');

// function checks array and tallies total found items
function checkFound() { 
var foundItems = 0;

for(var i=0; i<treasureCheck.length; i++) {
    var value = treasureCheck[i];
    if(value == 1) {
        ++foundItems;
    }
}
// writes found items to span on page
$('.thProgress').text(foundItems);

}

// check number artefacts and write to page
var treasureTotal = treasureCheck.length / 2;
$('.thTotal').text(treasureTotal);

// on click checks element id against array and, if found, marks the following value as 1
$('.artefact-right, .artefact-left').click(function(){
var artefactID = $(this).attr('id');

for(var e=0; e<treasureCheck.length; e++) {
    var matchID = treasureCheck[e];
    var k = e + 1;

    if(matchID == artefactID) {
        treasureCheck[k] = 1;

        // checks for total found items
        checkFound();

        // updates cookie with new array
        $.cookie('treasure_hunt', treasureCheck, { expires: 7 });
    }

}

});

1 Ответ

3 голосов
/ 04 октября 2011

Согласно файлу README в github , вам нужно определить путь, по которому cookie-файл действителен, если вы не хотите, чтобы он был только для страницы, на которой он был создан:

Определите путь, по которому cookie действителен. По умолчанию путь к cookie - это путь к странице, на которой был создан cookie (стандартное поведение браузера). Если вы хотите сделать его доступным, например, по всему пути к странице, используйте путь: '/'.Если вы хотите удалить куки с определенным путем, вам нужно включить этот путь в вызов.

Так что я думаю, что это будет что-то вроде этого:

$.cookie('treasure_hunt', treasure, { expires: 7, path: '/' });

PS В конце вашей декларации var treasure = new Array() вам не хватает точки с запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...