我有以下功能来设置和获取cookie,我测试了本地主机上的代码,它似乎正在工作,但是当我把它放在服务器上时却没有。我可以检查浏览器上的cookie,但是当我尝试使用function getCookies()
读取它时,它不起作用。
问题:
代码:
<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函数内的警报显示“undefined”,该值应该是值。当我尝试打印ARRcookies时,它会显示所有的cookie,但我设置的是'domain'和'tld'。我可以在浏览器的cookie列表中看到cookies'domain'和'tld'。
答案 0 :(得分:0)
用于连接readCookie
功能的代码如下:
window.onload(readCookie());
如果将代码分成两行,可能更容易看到:
var cookie = readCookie();
window.onload(cookie);
首先调用readCookie
(一旦从服务器加载JavaScript,之前已初始化完整的document
)。
在readCookie
返回后,其结果将传递给方法window.onload
。
这会导致一些问题:
window
对象没有onload
方法。它有一个onload
事件,您可以注册
您可能不想立即调用readCookie
,而是希望onload
调用它。
你可以通过像这样注册它来完成这个(如Pointy评论的那样):
window.onload = readCookie;
因此,您可以设置window.onload
事件来执行readCookie
功能。在那个阶段,cookie将可用。