#javascript
#javascript
Вопрос:
Ссылка на код для тестирования: https://jsbin.com/modocelume/edit?js, консоль
Один из моих файлов cookie всегда имеет значение null. Остальные читаются нормально. В реальном приложении он предназначен для чтения параметров URL. В этом сценарии я действительно могу изменить, какой из них равен null, но это всегда хотя бы один!
Я вижу, что файл cookie установлен в инструментах разработчика, это не только HTTP, и срок действия в порядке.
У кого-нибудь есть опыт работы с этим?
var urlParams = [
'utm_source',
'utm_medium',
'utm_campaign',
'utm_term',
'utm_content'
];
function createCookie(name, value, days, domain) {
if (days) {
var date = new Date();
date.setTime(date.getTime() (days*24*60*60*1000));
var expires = '; expires=' date.toGMTString();
} else {
var expires = '';
}
if (domain) {
var domain = '; domain=' domain;
}
document.cookie = name '=' value expires domain '; path=/';
}
function readCookie(name) {
var name = name '=',
fields = document.cookie.split(';');
for(var i=0; i < fields.length; i ) {
var field = fields[i];
while (field.charAt(0)==' ') {
field = field.substring(1, field.length);
if (field.indexOf(name) == 0) {
return field.substring(name.length, field.length);
}
}
}
return null;
}
urlParams.forEach(function(param) {
createCookie(param, param, 365, '');
});
urlParams.forEach(function(param) {
console.log(readCookie(param));
});
Я ожидаю, что вывод для readCookie('utm_source')
будет utm_source
, но вывод null
.
Спасибо за вашу помощь!
Комментарии:
1. Этот код в dev toolbar работает нормально, я получаю все значения файлов cookie. Ваша проблема в том, что вы получаете
null
даже на панели инструментов разработчика?2. Вот более длинная версия скрипта, делающая (в основном) то, что она должна делать: everythingiscute.com/… Но я все еще получаю utm_source как null. imgur.com/By5VT97 Файл cookie создается, я просто не могу его прочитать. В консоли отображается значение null.
Ответ №1:
По какой-то причине перед вашим utm_source
именем поля не было пустого места, поэтому ваше while (field.charAt(0) === ' ')
не сработало для него. Я изменил его на приведенный ниже код, и, похоже, теперь он работает нормально:
function readCookie(name) {
var name = name '=',
fields = document.cookie.split(';');
for(var i=0; i < fields.length; i ) {
var field = fields[i].trim();
if (field.indexOf(name) == 0) {
return field.substring(name.length, field.length);
}
}
return null;
}