2017-02-23 31 views
0

Что я пытаюсь сделать:Установка куки не работает, как ожидалось

Когда HREF нажата я вызвать функцию saveItem(). Это называется, как показано ниже:

<a href="#" class="save-product" onclick="saveItem('savedList', '<?php echo get_the_ID();?>', 90)">

savedList = имя моего печенья

get_the_ID() = A WordPress функцию, чтобы получить ID пост текущего, в '185' и т.д.

= дни для печенья истекает

Когда Вызывается saveItem(), он проверяет, существует ли файл cookie с именем savedList. Если это не так, создается куки-файл с таким именем и добавляется значение, которое передается через параметр (идентификатор текущего сообщения). Когда этот файл cookie существует, я хочу добавить к этому файлу cookie еще один идентификатор, а разделитель будет ;, поэтому я могу - на другой странице показать список продуктов через этот список файлов cookie.

Так что у моего печенья есть «185». Когда я добавляю новый идентификатор, например «65», я хочу, чтобы мой файл cookie стал «185; 65»

Моя проблема:, что она не работает должным образом. Странно то, что если я вижу на console.log("New Value Is : " + newValue);, он показывает «185; 65», но console.log(mNameList); снова показывает только «185».

Чтобы проверить значение моего Пирожка я использую:

print_r($_COOKIE['savedList']); 

функции ниже:

saveItem():

function saveItem(name,value,days) { 

    var expires = ""; 
    if (days) { 
     var date = new Date(); 
     date.setTime(date.getTime() + (days*24*60*60*1000)); 
     expires = "; expires=" + date.toUTCString(); 
    } 

    // Get Cookie 
    var mNameList = getCookie(name); 

    // If cookie is empty - doesn't exist then create it and put the value given 
    if (mNameList == "") { 
     document.cookie = name + "=" + value + expires + "; path=/"; 
    } else { 

     // If cookie exists, check if it has already this value, if it doesn't then add oldvalue + new value to that cookie. 
     if(mNameList !== value){ 
      var newValue = mNameList + ';' + value; // "185;65" 
      document.cookie = name + "=" + newValue + expires + "; path=/"; 
      console.log("New Value Is : " + newValue); 
      var mNameList = getCookie(name); // Το check current cookie get it again 
      console.log(mNameList); // Show it - here it shows "185" 
     } 
     else{ 
      // Value already exists in cookie - don't add it 
      console.log("Are same - mNameList->" + mNameList + " | currentID->" + value); 
     } 
    } 
} 

Getcookie();

function getCookie(cname) { 
     var name = cname + "="; 
     var decodedCookie = decodeURIComponent(document.cookie); 
     var ca = decodedCookie.split(';'); 
     for(var i = 0; i <ca.length; i++) { 
      var c = ca[i]; 
      while (c.charAt(0) == ' ') { 
       c = c.substring(1); 
      } 
      if (c.indexOf(name) == 0) { 
       return c.substring(name.length, c.length); 
      } 
     } 
     return ""; 
    } 

ответ

0

Хорошо, поэтому проблема была в разделителе и в моем коде тоже - то, как я проверял, существует ли идентификатор, было неправильно, но ниже работает.

saveItem()

function saveItem(name,value,days) { 

     var expires = ""; 
     if (days) { 
      var date = new Date(); 
      date.setTime(date.getTime() + (days*24*60*60*1000)); 
      expires = "; expires=" + date.toUTCString(); 
     } 

     var mNameList = getCookie(name); 

     if (mNameList == "") { 
      document.cookie = name + "=" + value + expires + "; path=/"; 
     } else { 

      var doesItemExists = false; 
      var partsOfStr = mNameList.split('-'); 

      for(var i =0; i < partsOfStr.length; i++){ 
       if(partsOfStr[i] == value) 
        doesItemExists = true; 
      } 

      if(!doesItemExists){ 
       var newValue = mNameList + '-' + value; 
       document.cookie = name + "=" + newValue + expires + "; path=/"; 
       console.log("New Value Is : " + newValue); 
      } 
      else{ 
       console.log("Are same - mNameList->" + mNameList + " | currentID->" + value); 
      } 
     } 
    } 
1

Как вы сами ; это поле Разделитель в куки между значением, истечения срока действия и т.д. Вы не можете использовать его, чтобы отделить ваши ценности.

Смежные вопросы