2013-03-14 65 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