Один из моих файлов cookie, установленных с помощью Javascript, всегда выдает значение null. Остальные читаются нормально

#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;
}