Protossan
@Protossan
студент

В чем причина ошибки .push?

Имеется скрипт, который должен делать на сайте список "любимых" страниц. Но уже втрой день бьюсь с ошибкой TypeError: faves is null, может вы можете подсказать в чем проблема?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Sample</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
  <script>

function SetCookies(name, value, days) {
    var expires = '',
    date = new Date();
    if (days) {
      date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
      expires = '; expires=' + date.toGMTString();
    }
    document.cookie = name + '=' + value + expires + '; path=/';
  }

  function GetCookies(name) {
    var nameEQ = name + '=',
    allCookies = document.cookie.split(';'),
    i,
    cookie;
    for (i = 0; i < allCookies.length; i += 1) {
      cookie = allCookies[i];
      while (cookie.charAt(0) === ' ') {
        cookie = cookie.substring(1, cookie.length);
      }
      if (cookie.indexOf(nameEQ) === 0) {
        return cookie.substring(nameEQ.length, cookie.length);
      }
    }
    return null;
  }


var faves = [];
  $(function(){
  
    var url = window.location.href; 
    $(document.body).on('click','#addTofav',function(e){
      e.preventDefault();
      var pageTitle = $(document).find("title").text();
      var fav = {'title':pageTitle,'url':url};
      faves.push(fav);
      var stringified = JSON.stringify(faves);
      SetCookies('favespages', stringified);
      location.reload();
    });
    $(document.body).on('click','.remove',function(){
      var id = $(this).data('id');
      faves.splice(id,1);
      var stringified = JSON.stringify(faves);
      SetCookies('favespages', stringified);
      location.reload();
    });

     var myfaves = JSON.parse(GetCookies('favespages'));
     faves = myfaves;
    $.each(myfaves,function(index,value){
      var element = '<li class="'+index+'"><h4>'+value.title+'</h4> <a href="'+value.url+'">Open page</a>  '+
      '<a href="javascript:void(0);" class="remove" data-id="'+index+'">Remove me</a>';
      $('#favlinks').append(element);
    });
  });

 </script>
</head>
<body>

  <a href="javascript:void(0);" id="addTofav">Add to fav</a>

  <ul id="favlinks">

  </ul>
</body>
</html>
  • Вопрос задан
  • 39 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function GetCookies(name) {
  <...>
  return null;
}
<...>
faves.push(fav);
<...>
var myfaves = JSON.parse(GetCookies('favespages'));
faves = myfaves;

То есть, GetCookies может вернуть null. Который вы потом распарсите, получив null ещё раз, и у этого null'а затем попытаетесь вызывать метод push. И типа так и надо. Не-а, не так. Может проверку какую-нибудь добавите при присваивании, что у вас там массив? Например: faves = myfaves instanceof Array ? myfaves : [];.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы