为什么下面的代码不起作用?我试图调用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可能需要不同的操作,因此为什么我要保持选项打开以从该函数中调用全局函数。
答案 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);