1

私は私のPHPにこの関数を持っています:

setcookie("UserPusser", $user, time() + 604800, "/pusser/beta/");
setcookie("PassPusser", $pass, time() + 604800, "/pusser/beta/");
setcookie("NotifPusser", $notif, time() + 604800, "/pusser/beta/");

そして、私は私のjavascriptにこの機能を持っています

function getThisCookie(name){
    var value;
    var singleCookie = document.cookie.split(";")
    for(var x in singleCookie){
        var y = singleCookie[x].split("=");
        if(y[0] == name) {
            value = y[1];
        }
    }
    return value;
}

入力するとalert(getThisCookie('UserPusser'))、結果が欲しいものになります。しかし、私が書き込もうとしたとき、alert(getThisCookie('NotifPusser'));またはalert(getThisCookie('PassPusser'));結果は未定義です。

誰でも私を助けることができますか?

私がやろうとしているのは、ページがリロードされるたびにブラウザにチェックボックスの値を記憶させることです。

4

1 に答える 1

0

完全を期すために、コメント内のヒントだけではなく、完全な回答をここに示します。

Cookie 値は (セミコロン + 空白) で区切られ;ます。これにより、次のようになります。

cookie = 'a=123; b=456; c=678'

それらを区切るには、同じ区切り文字で分割する必要があります。最新のブラウザー (JS 1.6+ だと思いますが、今はよくわかりません) またはunderscore.jsのようなライブラリを使用すると、それらをオブジェクトに入れることもできます。

// if your browser supports 'reduce'
var cookieObject = document.cookie.split('; ').reduce(function(o, kvp) {
  var split_kvp = kvp.split('=');
  o[split_kvp[0]] = split_kvp[1];
  return o;
}, {});

// underscore.js version
var cookieObject = _.reduce(document.cookie.split('; '), function(o, kvp) {
  var split_kvp = kvp.split('=');
  o[split_kvp[0]] = split_kvp[1];
  return o;
}, {});

とにかく、これらのいずれかを実行した後、探している値に簡単にアクセスできます。

cookieObject.a == 123
cookieObject.b == 456

それらはreadOnlyであることを覚えておいてください。それらを変更するには、オブジェクトをdocument.cookie

// again, modern browser version
document.cookie = Object.keys(cookieObject).map(function(key) {
  return key + '=' + cookieObject[key];
}).join('; ');

// with underscore.js
document.cookie = _.chain(cookieObject).keys().map(function(key) {
  return key + '=' + cookieObject[key];
}).value().join('; ')
于 2012-05-19T12:01:06.253 に答える