为什么这不起作用?它涉及cookie,函数和参数

时间:2016-03-25 05:07:24

标签: javascript html cookies

为什么下面的代码不起作用?我试图调用checkCookie()然后在该函数内通过该原始函数的参数调用2个其他函数。它根本不起作用。

<!DOCTYPE html>
<html>
<head>
<script>

function setCookie(cname,cvalue,exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires=" + d.toGMTString();
    document.cookie = cname+"="+cvalue+"; "+expires;
}

function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}

function checkCookie(cookieName, action1, action2) {
    var temp = getCookie(cookieName);
    if (temp!= "") {
        window[action1];
    } else {
       temp = window[action2];
       if (temp != "" && temp!= null) {
           setCookie(cookieName, temp, 30);
       }
    }
}

function alertUser(message, varName){
    alert(message + varName);
}

function promptUser(message){
    prompt(message,"");
}

checkCookie("username", alertUser("Welcome back, ", temp), promptUser("Please enter in your name"));
</script>
</head>
<body>
</body>
</html>

我尝试了许多不同的组合,很多我已经失去了轨道,所以我道歉,我无法向你展示我尝试过的所有内容。非常感谢您的帮助! :)我想多次调用checkCookie许多不同的cookie,这些cookie可能需要不同的操作,因此为什么我要保持选项打开以从该函数中调用全局函数。

1 个答案:

答案 0 :(得分:0)

您有几个问题,请阅读以下评论

function setCookie(cname,cvalue,exdays) {
    //omitted
}

function getCookie(cname) {
    //omitted
}

function checkCookie(cookieName, action1, action2) {
    //temp is available only here
    var temp = getCookie(cookieName);
    if (temp!= "") {
        //action1(alertUser) bad usage
        window[action1];
    } else {
       //also action2(promptUser) bad usage
       temp = window[action2];

       //redundant, just `if(temp)`
       if (temp != "" && temp!= null) {
           setCookie(cookieName, temp, 30);
       }
    }
}

function alertUser(message, varName){
    alert(message + varName);
}

//doesn't store value
function promptUser(message){
    prompt(message,"");
}

//temp is not available here
//although it's available, it's a bad idea to use vars from other functions
//if person doesn't enter anything, this will break, no cycling
checkCookie("username", alertUser("Welcome back, ", temp), promptUser("Please enter in your name"));

更好的

function setCookie(cname, cvalue, exdays) {
  //omitted
}

function getCookie(cname) {
  //omitted
}

function checkCookie(cookieName, callback) {
  var temp = getCookie(cookieName);
  if (temp) {
    callback(null, temp);
  } else {
    callback('No cookie', null);
  }
}

function callbackFn(err, result) {
  if (err) {
    var uname = prompt('Please enter in your name');
    if (uname === '') {
      //hit ok, but no value, re-show prompt
      checkCookie('username', callbackFn);
    } else if (uname) {
      //entered value, hit ok
      setCookie('username', uname, 30);
    } else {
      //hit cancel
      checkCookie('username', callbackFn);
      //or leave website?
    }
  } else {
    alert('Welcome back, ' + result);
  }
}
checkCookie('username', callbackFn);
相关问题