1

当页面加载时,会通过 PHP 在任何其他内容或标题之前使用以下代码创建一个 cookie:

$steam_login_verify = SteamSignIn::validate();
if(isset($_COOKIE['userid']))
{
     //work with cookie value to get data;
     $steam_login_verify = $_COOKIE['userid'];

     $id = new SteamId($steam_login_verify);

     $name = $id->getNickname(); 
     $baseUrl = $id->getBaseUrl();
     $medAvatar = $id->getMediumAvatarUrl();
} else if(!empty($steam_login_verify))
{
     //create the cookie and store the user id as the value
     $exDate = time()+60*60*24*365;
     setcookie('userid', $steam_login_verify, $exDate,'/');

     $id = new SteamId($steam_login_verify);
     $name = $id->getNickname(); 
     $baseUrl = $id->getBaseUrl();
     $medAvatar = $id->getMediumAvatarUrl();
}

然后我使用James Auldridge 的jQuery cookie 插件来管理 cookie。

一旦用户通过 Stream 登录,他们的 Steam64Id 将在 cookie 中存储一年,以防止他们每次访问他们的页面时都必须登录(假设他们会定期访问它)。

然后,我在 ajax 调用中使用 Steam64Id 来获取所有用户的朋友,并使用他们的姓名填充选择元素。

页面上有一个“退出”按钮,单击该按钮将删除 cookie 并刷新页面,导致用户不得不再次通过 Steam 登录。这就是我遇到问题的地方。

只要 ajax 调用正在运行(并且需要一段时间才能运行约 57 秒),注销按钮就可以正常工作。一旦该调用完成并填充了 select 元素,注销按钮将失败并在控制台中显示错误:

Uncaught TypeError: Cannot call method 'del' of undefined

这个错误引用的代码是删除cookie并刷新页面的函数:

$('#logout').click(function() {
     $.cookies.del('userid');
     window.location.reload();
});

我不明白这个错误,或者它为什么被抛出。这里的任何帮助都会很棒。

4

1 回答 1

1

我必须查看更多客户端代码和 AJAX 响应才能确定,但​​我怀疑 AJAX 响应包含一个重新加载 jQuery 的 SCRIPT 标记,导致所有加载的插件($.cookies包括参考)被删除。

请记住,这$.cookies是一个别名,jaaulde.utils.cookies因此您的故障排除部分可以改用它,然后查看它是否有效。

于 2012-10-01T14:53:03.910 回答