【问题标题】:AngularJS: Unable to get responseHeaders after a $resource $saveAngularJS:$resource $save 后无法获取 responseHeaders
【发布时间】:2016-05-24 14:32:43
【问题描述】:

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

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

我无法从“responseHeaders”参数中检索任何内容。 “responseHeaders()”返回一个空对象。我想像这样提取“位置”响应标头:responseHeaders("Location")。

值得注意的是,在chrome中调试时会填写Response。 “responseHeaders”对象由于某种原因未能填充。

我们怎样才能得到这些responseHeaders?

谢谢!

【问题讨论】:

  • $save()first参数不是参数对象,second是回调吗?这将使您传递的函数被评估为预期返回的(参数)对象。试试myObj.$save({}, function .... )
  • 感谢@towr,这是正确的。我更新了问题以反映这一点。仍然看到同样的问题。

标签: javascript angularjs angularjs-resource


【解决方案1】:

这可能是 CORS 问题吗?如果您要跨域进行调用,请务必在飞行前的 OPTIONS 调用中包含 cors.exposed.headers。

【讨论】:

    【解决方案2】:

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

    Access-Control-Expose-Headers: Location
    

    有了这个,浏览器能够公开您的海关标题并阅读它的角度。

    【讨论】:

      【解决方案3】:

      我对 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 代码能够读取标题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-14
        • 2014-03-31
        • 2017-05-10
        • 1970-01-01
        • 1970-01-01
        • 2012-12-07
        • 2012-11-24
        • 1970-01-01
        相关资源
        最近更新 更多