当页面加载时,在使用此代码的任何其他内容或标题之前,通过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's cookies plugin为jQuery管理cookie。
一旦用户通过Stream登录,他们的Steam64Id将存储在cookie中一年,以防止他们每次访问页面时都必须登录(假设他们将定期访问它)。
然后我在ajax调用中使用Steam64Id来获取所有用户朋友并用他们的名字填充select元素。
在页面上有一个“Logout”按钮,当点击该按钮时,将删除cookie并刷新页面,导致用户必须再次通过Steam登录。这就是我遇到问题的地方。
只要ajax调用正在运行(并且运行〜57秒需要一段时间),注销按钮才能正常工作。一旦完成调用并填充了select元素,注销按钮就会失败并在控制台中出错:
Uncaught TypeError: Cannot call method 'del' of undefined
此错误引用的代码是删除cookie并刷新页面的函数:
$('#logout').click(function() {
$.cookies.del('userid');
window.location.reload();
});
我不明白错误,或者为什么会抛出错误。这里的任何帮助都会很棒。
答案 0 :(得分:1)
我必须看到更多的客户端代码和AJAX响应,但我怀疑AJAX响应包含一个重新加载jQuery的SCRIPT标记,导致所有加载的插件(包括$.cookies
引用)成为删除。
请注意,$.cookies
是jaaulde.utils.cookies
的别名,因此您的部分疑难解答可能是使用它,然后查看它是否有效。