jsfiddle说有错误但它有效吗?试图创建一个cookie阅读功能

时间:2013-01-19 21:43:08

标签: javascript function cookies jsfiddle indexof

document.cookie = "happy=random stuff";
function readCookie(name) {
    var cookie,cname,i;
    cookie = document.cookie.split(";");
    cname = name;
    for (i=0; i<=cookie.length; i++) {
        var c = cookie[i];
        if (c.indexOf(cname) == 0) {
            alert(c.substring(cname.length,c.length));
            return c.substring(cname.length,c.length);
        }
    }
    return null;
}

readCookie("happy");

http://jsfiddle.net/a2R3j/ 这条线似乎错了:

if (c.indexOf(cname) == 0) {

它完美无缺。然而,jsfiddle说有一个错误。实际上有什么不对吗?

编辑CLARITY:我希望它通过调用函数getCookie(此处为name)来返回cookie的内容 另一个编辑为清晰起见 Yusaf代码:stuff

带indexOf的代码:stuff

2 个答案:

答案 0 :(得分:0)

http://jsfiddle.net/6qLZe/

使用.split("=")[1]而非您的子字符串方法

document.cookie = "joker=batman";

function readCookie(cname) {
    var cookie_split = document.cookie.split(";");
    for (i = 0; i < cookie_split.length; i++) {
        var cookie_var = cookie_split[i].split("=")[0];
        if (cookie_var == cname) {
            return cookie_split[i].split("=")[1];
        }
    }
    return null
}

alert(readCookie("joker"));

答案 1 :(得分:0)

你在document.cookie中有一个cookie - 所以长度为1,而cookie位于0(js从零开始)。

您的for循环高达i <= cookie.length,因此会迭代两次 - 首先是cookie[0],然后是cookie[1],因为cookie[1]失败了不存在。

for循环更改为for (i = 0; i < cookie.length; i++) {