0

Cookieを設定および取得するための次の関数があります。ローカルホストでコードをテストしましたが、機能しているようですが、サーバーに配置しても機能しません。ブラウザでCookieを確認できますが、を使用してCookieを読み取ろうとするとfunction getCookies()、機能しません。

質問:

  • クッキーを間違って設定していますか?
  • なぜ実際的にではなくブラウザでCookieを表示できるのですか?
  • クッキーを間違って読んでいますか?

コード:

<script type="text/javascript"><!--

function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
alert(ARRcookies);
for (i=0;i<ARRcookies.length;i++)
  {
  x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
  y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
  x=x.replace(/^\s+|\s+$/g,"");
  if (x==c_name)
    {
    return unescape(y);
    }
  }
}

function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}


function readCookie(){
  alert("here");
  var domain = checkCookie("domain");
  var tld= checkCookie("tld");
  alert(domain+" "+tld);
}

window.onload(readCookie());
// --></script>

更新: readCookie関数内のアラートは、値であるはずの「未定義」を示しています。ARRcookiesを印刷しようとすると、設定した「domain」と「tld」を除くすべてのcookieが表示されます。ブラウザのCookieリストにCookieの「ドメイン」と「tld」が表示されます。

4

1 に答える 1

0

関数を接続するコードreadCookieは次のとおりです。

window.onload(readCookie());

コードを 2 行に分割すると、見やすくなります。

var cookie = readCookie();
window.onload(cookie);

したがって、これが最初に呼び出されますreadCookie(JavaScript がサーバーから読み込まれるとすぐに、完全に初期化される前documentに)。

返された後readCookie、その結果がメソッドに渡されwindow.onloadます。

これにより、いくつかの問題が発生します。

  1. オブジェクトにはメソッドがありwindowませんonloadonload登録できるイベントがあります

  2. readCookieおそらくすぐに呼び出すのではなく、 によって呼び出されるようにしたいでしょうonload

次のように登録することで、これを実現できます(Pointyがコメントしたように):

window.onload = readCookie;

これで、関数window.onloadを実行するイベントを設定していますreadCookie。その段階で、Cookie が利用可能になります。

于 2012-11-18T17:13:04.947 に答える