【问题标题】:Handling 406 http response in angularjs在 angularjs 中处理 406 http 响应
【发布时间】:2014-07-31 19:51:38
【问题描述】:

我在 Rails 后端使用带有 ngResource 工厂和 restful 控制器的 angular。当发出创建新记录的发布请求时,我的 API 会以 406 响应和 json 响应的结构进行响应:

{ success: false, errors ['error1', 'error2'], message: "record didn't save" }

问题是当我从 API 返回 406 响应并且 angular 无法处理响应时,我在控制台中看到发布请求错误。

类似:

POST http://localhost:3000/api/widget/384/comments 406 (Not Acceptable)    includes.js?v=e777c6e0fdfb9a725e857c8ca3eab18f:545
  sendReplacement includes.js?v=e777c6e0fdfb9a725e857c8ca3eab18f:545
  (anonymous function) angular.js?body=1:8381
  sendReq angular.js?body=1:8181
  $http.serverRequest angular.js?body=1:7922
  wrappedCallback angular.js?body=1:11320
  wrappedCallback angular.js?body=1:11320
  (anonymous function) angular.js?body=1:11406
  Scope.$eval angular.js?body=1:12413
  Scope.$digest angular.js?body=1:12225
  Scope.$apply angular.js?body=1:12517
  (anonymous function) angular.js?body=1:18627
  jQuery.event.dispatch jquery.js?body=1:5117
  elemData.handle

我的角度代码的结构如下:

Object.save( { object_id: 1 } ).$promise.then(function (response) {
  if (response.success) {
    //success
  } else {
    // something else
  }

如何指示 Angular 处理这种 HTTP 响应?

【问题讨论】:

    标签: ajax angularjs


    【解决方案1】:

    您应该检查您的服务器代码,一般 406 表示您的客户端不接受某些标头/内容类型。

    Accept:客户端接受的 MIME 类型。例如,浏览器可能只接受它知道如何处理的返回类型的数据(HTML 文件、GIF 文件等)。 Accept-Charset:客户端接受的字符集。 Accept-Encoding:客户端接受的数据编码,例如它理解的文件格式。 Accept-Language:客户接受的自然语言(英语、德语等)。 Accept-Ranges:客户端是否接受来自资源的字节范围,即资源的一部分。

    因此请检查您的服务器正在输出哪些标头。

    您还可以检查“响应”对象上还有哪些其他可用属性。

    【讨论】:

      猜你喜欢
      • 2016-09-20
      • 2013-09-15
      • 1970-01-01
      • 2012-10-21
      • 2015-10-02
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多