функция не возвращает переменную - PullRequest
0 голосов
/ 19 мая 2011

У меня есть функция, которая принимает параметр (ключ) для получения его значения из файла 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
});

Кто-нибудь знает, что я сделал неправильно или как я могу получить это значение?

Ответы [ 4 ]

2 голосов
/ 19 мая 2011

Вот, пожалуйста:

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

Таким образом, вы return false внутри ветви if (когда найдете нужное значение), чтобы выйти из цикла $.each. Затем вы просто return value из функции getCookieVal.

Обратите внимание, что не нужно для определения глобальной переменной keyval здесь.

1 голос
/ 19 мая 2011

Эта строка:

return keyval;

... возвращает анонимную функцию, которую вы передали $.each, а не функцию getCookieVal.

0 голосов
/ 19 мая 2011

Ваш код может быть уменьшен до этого (при условии, что вызывающему 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);
});
0 голосов
/ 19 мая 2011

Вам нужно return false, чтобы вырваться из вашей петли.В противном случае цикл продолжается и keyval перезаписывается.Вы возвращаете keyval, что не нарушит цикл.Измените это на false, и вы должны быть хорошими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...