2013-03-14 53 views
0

我試圖在用戶訪問網站時獲得一次性警報,然後放置一個cookie,以便每次返回該網站時都不會使用它。 cookie被保存並且警報正在執行,但它正在執行,我正在撕掉我的頭髮。一次性警報繼續執行

我已經嘗試了一些在網上找到的東西(StackExchange,我是如何愛你)但似乎沒有工作。這是目前的狀態:

<script> 
    function setCookie(name, value, days) 
    { 
     if (days) 
     { 
     var date = new Date(); 
     date.setTime(date.getTime()+days*24*60*60*1000); 
     var expires = "; expires=" + date.toGMTString(); 
     } 
     else 
     var expires = ""; 
     document.cookie = name+"=" + value+expires + ";path=/"; 
    } 
</script> 

<body> 
    <script type="text/javascript"> 
     if(!setCookie('testcookie')) { 
      alert("hello world"); 
      setCookie('testcookie','1',3); 
     } 
    </script> 
</body> 

看着cookie記錄,它似乎每次都設置。如果我在腳本中更改過期日期,則每次都會在dev控制檯中進行更改。不確定這是否表示問題。

=====端到端解決方案======

我缺少的getCookie通話。我也意識到,當試圖將它添加到頭文件腳本時,執行需要是它自己的函數* facepalm *。我還將所有腳本添加到標題中,而是在body標籤中調用該函數。

<head> 
    <script> 
     function setCookie(name, value, days) { 
      if (days) { 
       var date = new Date(); 
       date.setTime(date.getTime()+days*24*60*60*1000); 
       var expires = "; expires=" + date.toGMTString(); 
      } 
      else 
       var expires = ""; 
       document.cookie = name+"=" + value+expires + ";path=/"; 
     } 

     var getCookie = function (c_name) { 
      var i, x, y, ARRcookies = document.cookie.split(";"); 
      for (i = 0; i < ARRcookies.length; i++) { 
       x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("=")); 
       y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1); 
       x = x.replace(/^\s+|\s+$/g, ""); 
       if (x == c_name) { 
        return unescape(y); 
       } 
      } 
     }; 

     function checkCookie() { 
      if(!getCookie('testcookie2')) { 
       alert("hello world"); 
       setCookie('testcookie2','1',3); 
      } 
     } 
    </script> 
</head> 
<body onload="checkCookie()"> 
</body> 

TA-DA!

+1

你總是設置Cookie,但沒有任何查詢現有的Cookie使用。 – 2013-03-15 00:19:10

+0

ftr w3schools有很多不良信息,包括貌似體面的壞信息,不認爲它們是可靠的來源。 – djechlin 2013-03-15 18:53:07

+0

是的,我發現這是一個很好的開始,但他們經常忽略那些在學習時會產生巨大差異的小細節,或者沒有足夠的示例變體來幫助解決問題。雖然這個論壇已被證明是非常寶貴的! – 2013-03-15 20:15:13

回答

0

我用一個小的JavaScript函數有時檢索cookie

var getCookie = function (c_name) { 
    var i, x, y, ARRcookies = document.cookie.split(";"); 
    for (i = 0; i < ARRcookies.length; i++) { 
     x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("=")); 
     y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1); 
     x = x.replace(/^\s+|\s+$/g, ""); 
     if (x == c_name) { 
      return unescape(y); 
     } 
    } 
}; 

,你可以結合你的其他邏輯

if(!getCookie('testcookie')) { 
    alert("hello world"); 
    setCookie('testcookie','1',3); 
} 
+0

我想我也應該提到,我從w3Schools網站獲得了這個功能:http://www.w3schools.com/js/js_cookies.asp。這裏還有setCookie(),getCookie()和checkCookie()的示例函數。 – Melon 2013-03-15 00:16:41

+0

謝謝,這有助於我*幾乎*那裏。我在w3Schools例子中遇到的麻煩是它增加了一個值(用戶名)並檢查了兩者。但我的警報只是一個「好的」框,所以沒有任何價值可供檢查。當我刪除那一點時,cookie似乎沒有設置。使用我原來的'!getCookie'函數似乎也沒有工作。在這種情況下,它每次都設置。 – 2013-03-15 18:19:44

+0

沒關係,我明白了!我會用那些需要更確切答案的最終解決方案更新我的問題。非常感謝! – 2013-03-15 18:38:25