2

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

带有 ExtJS 4 存储的 HTTP 标头

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

了解 REST:动词、错误代码和身份验证

其中一个答案建议映射到最接近的 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 中访问此自定义响应标头以提取异常消息。

4

1 回答 1

4

响应对象有一个 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
        }
     }
于 2012-12-13T03:40:11.100 回答