我已经学会了如何从这个问题向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中获取对此自定义响应头的访问权以提取异常消息。
答案 0 :(得分:4)
响应对象有一个getAllResponseHeader()方法,您可以使用该方法访问所有标头键值对。
在Extjs中你可以这样做:
Ext.Ajax.request({
url: 'www.microsoft.com',
method: 'GET',
failure: function(response){
console.log(response.getAllResponseHeaders());
}
});
这将返回包含以下信息的实例:
connection: "keep-alive" content-encoding: "gzip" content-type: "text/html; charset=utf-8" date: "Thu, 13 Dec 2012 03:10:15 GMT" server: "nginx/0.8.54" transfer-encoding: "chunked" vary: "Cookie"
在您的情况下,您应该执行以下操作:
failure: function(response){
var header = response.getAllResponseHeaders(),
statusEx = header['X-Status-Extended'];
if(statusEx === '404.3 More Specific Error Here'){
// do something here
}
}