$cookies.get() 给出 undefined 尽管 document.cookie 包含值
$cookies.get() gives undefined although document.cookie contains the value
在下面的代码中,xsrfCookie
有时 未定义。我测量了大约 20% 的调用。
这似乎只发生在 MacOS Safari 和 iOS Safari en Chrome 中。我正在使用 Angular 1.5.6.
$http.get('some_url')
.success(function() {
var xsrfCookie = $cookies.get('XSRF-TOKEN');
});
在 xsrfCookie 之前或之后设置断点并记录 document.cookie
甚至 $cookies.get('XSRF-TOKEN')
始终显示预期的 XSRF 令牌。
我只能想象这与异步设置 GET 的 XSRF 令牌有关,与成功函数并行,但我在 angular.get()
代码中找不到任何建议这个。
有人 运行 了解这个问题吗?
到目前为止,我已经通过在超时中包装 cookie 的检索解决了这个问题:
$http.get('some_url')
.success(function() {
$timeout(function() {
var xsrfCookie = $cookies.get('XSRF-TOKEN');
}, 1);
});
不幸的是,我一直无法找到为什么需要这样做(预计它可能与 AngularJS 1.5 摘要周期有关)但我确实发现了其他一些事情:
- 原来的问题只出现在 iOS 和 MacOS 上的 Safari 中,而且只是偶尔出现。取决于环境(内联网、互联网),但每天都在变化,我有时会遇到 100% 的失败率,有时会低至 10%。
- 如果我将
document.cookie
记录为成功回调中的第一件事,它也是空的(再次仅在 Safari 中且仅有时)
- 可能
$timeout
仅在摘要完成后触发,即使 $timeout
没有毫秒参数也可以工作
- 像
onInit
这样的挂钩只会在摘要循环完成后 运行,但是这个调用是几个服务调用的深度,我不明白这是怎么回事。
在下面的代码中,xsrfCookie
有时 未定义。我测量了大约 20% 的调用。
这似乎只发生在 MacOS Safari 和 iOS Safari en Chrome 中。我正在使用 Angular 1.5.6.
$http.get('some_url')
.success(function() {
var xsrfCookie = $cookies.get('XSRF-TOKEN');
});
在 xsrfCookie 之前或之后设置断点并记录 document.cookie
甚至 $cookies.get('XSRF-TOKEN')
始终显示预期的 XSRF 令牌。
我只能想象这与异步设置 GET 的 XSRF 令牌有关,与成功函数并行,但我在 angular.get()
代码中找不到任何建议这个。
有人 运行 了解这个问题吗?
到目前为止,我已经通过在超时中包装 cookie 的检索解决了这个问题:
$http.get('some_url')
.success(function() {
$timeout(function() {
var xsrfCookie = $cookies.get('XSRF-TOKEN');
}, 1);
});
不幸的是,我一直无法找到为什么需要这样做(预计它可能与 AngularJS 1.5 摘要周期有关)但我确实发现了其他一些事情:
- 原来的问题只出现在 iOS 和 MacOS 上的 Safari 中,而且只是偶尔出现。取决于环境(内联网、互联网),但每天都在变化,我有时会遇到 100% 的失败率,有时会低至 10%。
- 如果我将
document.cookie
记录为成功回调中的第一件事,它也是空的(再次仅在 Safari 中且仅有时) - 可能
$timeout
仅在摘要完成后触发,即使$timeout
没有毫秒参数也可以工作 - 像
onInit
这样的挂钩只会在摘要循环完成后 运行,但是这个调用是几个服务调用的深度,我不明白这是怎么回事。