【问题标题】:window.localStorage.removeItem is not working in $http requestwindow.localStorage.removeItem 在 $http 请求中不起作用
【发布时间】: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


【解决方案1】:

您可以链接承诺以确保它完成

$http.post("MyService/MyAction").then(function (res) {
     if (res == true) {
         window.localStorage.removeItem(myToken);
         //window.localStorage.getItem(myToken) returns null in here.     
     }
})
.then(
    window.location = baseURL + 'Login.aspx';
)
.error(function () {
    //some stuff
});

【讨论】:

  • 好的,这不起作用,但多亏了你,我朝着正确的方向前进。我需要依次运行window.localStorage.removeItem(myToken)window.location = 'Login.aspx'。我在这个答案中找到了如何做到这一点link
  • 好的,很高兴你找到了答案,我已经更新了我的答案以反映如何解决它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多