AngularJS:在$ resource $ save之后无法获得responseHeaders

时间:2014-01-06 17:44:12

标签: javascript angularjs angularjs-resource

我正在执行以下$ save调用我的angularJS $资源和POST到我的API。我能够调试到我的成功回调处理程序,该对象实际上是在我的API中创建的。

myObj.$save({}, function (value, responseHeaders) {
    myObj.someSuccessFunction();
}, function (responseText) {
    myObj.someFailureFunction();
});

我无法从“responseHeaders”参数中检索任何内容。 “responseHeaders()”返回一个空对象。我想像这样拉出“location”响应头:responseHeaders(“Location”)。

值得注意的是,在使用chrome进行调试时,响应已填入。由于某种原因,“responseHeaders”对象无法填充。

我们如何才能获得这些响应头?

谢谢!

3 个答案:

答案 0 :(得分:2)

这可能是一个CORS问题吗?如果您正在通过域进行呼叫,请务必在飞行前的OPTIONS呼叫中包含cors.exposed.headers。

答案 1 :(得分:1)

如果是跨域调用,则必须在响应标头中添加以下标头:

Access-Control-Expose-Headers: Location

通过这种方式,浏览器能够将您的海关标题公开显示为有角度的。

答案 2 :(得分:0)

我对spring security 4.2 CORS过滤器和AngularJS有同样的问题。我使用Angular JS构建的客户端应用程序无法从spring rest api发送的响应头读取客户身份验证令牌。

我可以通过公开以下标题解决问题。

config.addExposedHeader("Origin");
config.addExposedHeader("X-Requested-With");
config.addExposedHeader("X-AUTH-TOKEN");
config.addExposedHeader("Content-Type");
config.addExposedHeader("Accept");
config.addExposedHeader("Authorization");
config.addExposedHeader("Location");

经过上述修复。我的Angular代码能够读取标题。