【问题标题】:ExtJS 4 - Accessing custom reponse headers within REST proxy and/or store?ExtJS 4 - 访问 REST 代理和/或存储中的自定义响应标头?
【发布时间】:2012-12-12 19:44:18
【问题描述】:

我从这个问题中了解了如何将自定义标头添加到 Ext-JS 请求:

HTTP Headers with ExtJS 4 Stores

现在我正在尝试处理当问题是用户错误时的异常处理问题。这个问题在这里处理:

Understanding REST: Verbs, error codes, and authentication

其中一个答案建议映射到最接近的 HTTP 错误代码,然后还使用自定义响应标头将异常信息传递回客户端。

我强烈建议不要扩展基本的 HTTP 状态代码。如果您找不到与您的情况完全匹配的一个,请选择最接近的一个并将错误详细信息放在响应正文中。另外,请记住 HTTP 标头是可扩展的;您的应用程序可以定义您喜欢的所有自定义标头。例如,我处理的一个应用程序可能在多种情况下返回 404 Not Found。我们没有让客户端解析响应正文,而是添加了一个新的标头 X-Status-Extended,其中包含我们专有的状态代码扩展。因此,您可能会看到如下响应:

HTTP/1.1 404 Not Found
X-Status-Extended: 404.3 More Specific Error Here

我非常喜欢这个主意。但无法弄清楚如何从 ExtJS 中访问此自定义响应标头以提取异常消息。

【问题讨论】:

标签: javascript web-services http rest extjs


【解决方案1】:

Response 对象有一个 getAllResponseHeader() 方法,您可以使用它来访问所有标头键值对。

在 Extjs 中你可以这样做:

Ext.Ajax.request({
    url: 'www.microsoft.com',
    method: 'GET',
    failure: function(response){
        console.log(response.getAllResponseHeaders());
     }
});​

这会返回一个带有此信息的实例:

连接:“保持活动” 内容编码:“gzip” 内容类型:“文本/html;字符集=utf-8” 日期:“格林威治标准时间 2012 年 12 月 13 日星期四 03:10:15” 服务器:“nginx/0.8.54” 传输编码:“分块” 变化:“饼干”

在您的情况下,您应该执行以下操作:

    failure: function(response){
        var header = response.getAllResponseHeaders(),
            statusEx = header['X-Status-Extended'];

        if(statusEx === '404.3 More Specific Error Here'){
            // do something here
        }
     }

【讨论】:

  • 是否可以通过 Store.load() 回调访问响应标头,其签名为:callback : function(record, operation, success)
猜你喜欢
  • 2018-02-17
  • 2015-07-16
  • 2021-08-13
  • 2015-06-06
  • 1970-01-01
  • 2011-12-24
  • 2017-08-13
  • 2022-10-24
  • 2020-09-15
相关资源
最近更新 更多