2017-02-23 7 views
0

私が達成しようとしているもの:クッキーの設定が正常に動作しない

hrefを押すと、私はsaveItem()関数を呼び出します。それは以下のように呼ばれている:

​​

savedList =私のクッキーの名前

get_the_ID()が '185'、現在のIDのポストを得るためにwordpressの機能を=など

た場合を期限切れにするCookieの日= saveItem()が呼び出されると、名前がsavedListのクッキーがすでに存在するかどうかがチェックされます。そうでなければ、その名前のクッキーを作成し、パラメータ(現在の投稿のID)を渡された値を追加します。 このクッキーが存在する場合、そのクッキーにもう1つのIDを追加したいと思います。区切り文字は;となります。他のページでは、そのクッキーのリストを通して製品リストを表示できます。

私のクッキーは「185」です。新しいID(「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

だから問題は区切り記号と私のコードにもありました - IDがすでに存在するかどうかを確認していた方法は間違っていましたが、以下のように動作します。

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

;は、値の間に、クッキー、有効期限などあなたの値を区切るためにそれを使用することはできませんでのフィールド区切り文字です。

関連する問題