在以下代码中,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()
代码中找不到任何暗示这一点的内容。
有没有人遇到过这个问题?
答案 0 :(得分:0)
到目前为止,我已经通过在超时中包装cookie的检索来解决这个问题:
$http.get('some_url')
.success(function() {
$timeout(function() {
var xsrfCookie = $cookies.get('XSRF-TOKEN');
}, 1);
});
不幸的是,我还没有找到为什么会这样做(希望它可能与AngularJS 1.5摘要周期有关)但我确实发现了其他一些东西:
document.cookie
作为成功回调的第一件事,它也是空的(仅在Safari中有时,有时仅)$timeout
才会在摘要完成后触发,即使$timeout
没有毫秒参数也可以使用onInit
之类的钩子只会在摘要周期结束后才会运行,但这次调用是深入的几次服务调用,我不明白这是怎么回事。