为什么不'这行得通吗?它涉及cookie、函数和参数

Why doesn't this work? It involves cookies, functions and parameters

本文关键字:cookie 函数 参数 行得通 为什么不      更新时间:2023-09-26

为什么下面的代码不起作用?我试图调用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>

我尝试过很多不同的组合,太多了,以至于我迷失了方向,所以我很抱歉不能向你展示我尝试过的所有组合。非常感谢您的帮助!:)对于许多可能需要不同操作的不同cookie,我想多次调用checkCookie,因此我保留了从该函数中调用全局函数的选项。

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

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);