我有一个函数,它接受一个参数(key)从cookie中检索它的值。我在任何需要特定信息的地方调用该函数。除了一切都以未定义的形式回归。
//before $(document).ready();
var keyval = ""; //VARIABLE FOR PASSING COOKIE VALUE
var getCookieVal =function(c_name){
var cleanCookie = document.cookie.substr(0, document.cookie.indexOf("; __utma="));//REMOVES EXTRA INFORMATION
var cookieArr = cleanCookie.split(";");//MAKES AN ARRAY OF EACH PAIR
$.each(cookieArr, function(index, val){
var valArr = val.split("=");//SPLITS THE KEY VALUE PAIR INTO AN ARRAY
var key = valArr[0];
keyval = valArr[1];
if (key == c_name){
alert(keyval);//ALERTS CORRECT ANSWER
return keyval;
}
});
console.log(keyval);//RETURNS UNDEFINED
}
//IN ANOTHER FILE I CALL THE FUNCTION:
$(document).ready(function(){
getCookieVal("username");
alert(keyval);//RETURNS UNDEFINED
});
任何人都知道我做错了什么或我如何获得这个价值?
答案 0 :(得分:2)
你走了:
var getCookieVal = function(key) {
var coo = document.cookie;
arr = coo.substr(0, coo.indexOf('; __utma=')).split(';'),
value;
$.each(arr, function(i, v) {
var valArr = v.split('=');
if ( valArr[0] === key ) {
value = vallArr[1];
return false;
}
});
return value;
};
$(document).ready(function() {
var keyval = getCookieVal('username');
alert(keyval);
});
所以你在if-branch内部return false
(一旦找到所需的值)就会突破$.each
循环。然后,您只需return value
函数中的getCookieVal
。
请注意,无需可在此处定义全局keyval
变量。
答案 1 :(得分:1)
这一行:
return keyval;
...从您传递给$.each
的匿名函数返回,而不是从您的getCookieVal
函数返回。
答案 2 :(得分:0)
您需要return false
才能摆脱循环。否则,循环继续并覆盖keyval
。您正在返回keyval
,这不会破坏循环。将其更改为false
,您应该很好。
答案 3 :(得分:0)
您的代码可以简化为此(假设getCookieVal的调用者是可信的)
function getCookieVal(name)
{
var pattern = new RegExp('(?:^|;)' + name + '=([^;]*)', 'i'),
matches = pattern.exec(document.cookie);
return matches ? matches[1] : null;
}
$(document).ready(function() {
var keyval = getCookieVal('username');
alert(keyval);
});