0

我有以下功能来设置和获取 cookie,我在本地主机上测试了代码,它似乎可以工作,但是当我把它们放在服务器上时它没有。我可以检查浏览器上的 cookie,但是当我尝试使用 读取它们时function getCookies(),它不起作用。

问题:

  • 我是否错误地设置了 cookie?
  • 为什么我可以在浏览器上看到 cookie 而不是务实?
  • 我是否错误地阅读了 cookie?

代码:

<script type="text/javascript"><!--

function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
alert(ARRcookies);
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 setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}


function readCookie(){
  alert("here");
  var domain = checkCookie("domain");
  var tld= checkCookie("tld");
  alert(domain+" "+tld);
}

window.onload(readCookie());
// --></script>

更新: readCookie 函数中的警报显示“未定义”,这应该是值。当我尝试打印 ARRcookies 时,它会显示除我设置的“域”和“tld”之外的所有 cookie。我可以在浏览器的 cookie 列表中看到 cookie 的“域”和“tld”。

4

1 回答 1

0

您连接该readCookie功能的代码如下:

window.onload(readCookie());

如果将代码分成两行,可能会更容易看到:

var cookie = readCookie();
window.onload(cookie);

所以这首先调用readCookie(一旦从服务器加载了 JavaScript,完整document初始化之前)。

返回后readCookie,它的结果被传递给一个方法window.onload

这会导致几个问题:

  1. window对象没有onload方法。它有一个onload您可以注册的活动

  2. 您可能不想立即调用readCookiewhen ,而是希望它被onload.

您可以通过像这样注册它来完成此操作(正如 Pointy 评论的那样):

window.onload = readCookie;

因此,您正在设置window.onload事件以执行您的readCookie功能。在那个阶段,cookies 将可用。

于 2012-11-18T17:13:04.947 回答