完成ajax后,Cookie删除功能停止工作

时间:2012-10-01 14:31:03

标签: javascript jquery ajax cookies

当页面加载时,在使用此代码的任何其他内容或标题之前,通过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();
});

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

1 个答案:

答案 0 :(得分:1)

我必须看到更多的客户端代码和AJAX响应,但我怀疑AJAX响应包含一个重新加载jQuery的SCRIPT标记,导致所有加载的插件(包括$.cookies引用)成为删除。

请注意,$.cookiesjaaulde.utils.cookies的别名,因此您的部分疑难解答可能是使用它,然后查看它是否有效。

相关问题