【发布时间】:2018-03-27 18:34:20
【问题描述】:
我正在向我的网络服务发出一个发布请求,当它成功时,我正在尝试删除我之前放入本地存储的令牌,如下所示:
$http.post("MyService/MyAction").success(function (res) {
if (res == true) {
window.localStorage.removeItem(myToken);
//window.localStorage.getItem(myToken) returns null in here.
window.location = baseURL + 'Login.aspx';
}
}).error(function () {
//some stuff
});
然后我将重定向到网站上的登录页面。现在,当我检查本地存储是否标记在window.localStorage.removeItem(myToken) 之后立即删除时,我看到它已被删除,因为window.localStorage.getItem(myToken) 返回 null。
但是在我使用 window.location = baseURL + 'Login.aspx' 重定向并在 Login.aspx 页面中检查带有 window.localStorage.getItem(myToken) 的令牌之后,令牌就在那里并且没有被删除。
在 Login.aspx 中
window.localStorage.getItem(myToken)
//in here the token is returned where it's suppose to be deleted.
起初我以为我在重定向到 Login.aspx 之间的某个地方再次添加了令牌,但是当我使用 $.ajax 发送请求并删除令牌时它可以工作。那么关于 angularjs 是否有一些东西 $http 没有做我可以用 $.ajax 做的事情。
【问题讨论】:
-
能否在有机会删除之前进行重定向?
-
window.localStorage.removeItem(myToken); //window.localStorage.getItem(myToken) 在此处返回 null。 window.location = baseURL + 'Login.aspx';我删除后重定向。怎么可能?
-
Javascript 是异步的,所以不管它的顺序是什么,Javascript 都会尽快完成任何动作,不管它们是如何被调用的。因此,如果删除令牌比重定向花费的时间更长,它可以在删除令牌之前重定向
-
我有点认为这可能会发生,但如何防止呢?我了解 $http 不支持 asynchronous=false。
-
看看是不是这样,在重定向前设置一个超时时间,然后看看是否删除
标签: javascript jquery angularjs ajax