Javascript 不同数据结构的ajax错误处理方法
我想使用两个或三个模块来显示错误,但是我有许多不同的错误数据结构作为ajax的响应。应避免每个ajax错误回调或每个错误显示模块的重复if/else链。以下是我收到的一些错误响应示例,这些错误响应以属性的形式显示给用户:Javascript 不同数据结构的ajax错误处理方法,javascript,ajax,angularjs,Javascript,Ajax,Angularjs,我想使用两个或三个模块来显示错误,但是我有许多不同的错误数据结构作为ajax的响应。应避免每个ajax错误回调或每个错误显示模块的重复if/else链。以下是我收到的一些错误响应示例,这些错误响应以属性的形式显示给用户: 500 Server Error: { ... Message: "An error has occurred.", ... } 401 Login Error: { ... Reason: "Invalid login credent
500 Server Error: {
...
Message: "An error has occurred.",
...
}
401 Login Error: {
...
Reason: "Invalid login credentials.",
...
}
400 Bad Request on Put: {
Errors: [
{
PropertyName: "EmailAddress",
ErrorName: "Invalid email address."
}
]
}
目前,我正在考虑通过angular中的
$httpProvider.interceptors
(类似于jQuery中的ajaxSetup?)获取每个错误响应,并强制每个错误响应具有一致的属性名称。我不知道这是否是一个糟糕的设计,但它肯定会让事情变得更简单。解决这个问题的几种方法之一是使用两个概念:
- 应用程序:负责应用程序逻辑,获取错误对象并将其传递给
- 工厂:负责分析错误对象并确定哪种适配器满足需要
- 适配器:负责处理错误,并独立于内部格式以统一的方式处理错误李>
function serviceResponse(error, response) {
// assuming error could be all different shapes and sizes
if (error) {
adaptorFactory
.getAdaptor(error)
.process(error)
}
// your valid response logic
}
适应新错误格式的未来更改
如果出现新错误,则必须进行两项更改:在工厂中创建一个新的适配器对象和一个新的If/else
。但它的美妙之处在于,您根本不会触及应用程序逻辑。serviceResponse
方法保持原样
同样,有很多好的解决方案,这只是一种方法。只要保留关键概念,就可以根据需要开发适配器和工厂。我的例子只是为了举例说明
希望这能有所帮助。找出您希望如何处理错误处理,然后使用a将您的响应转换为您开发的适当对象/API。听起来不错,我以一种不太引人注目的方式实现了它,但一切都简化了。这似乎是解决这类问题的常见方法。如果您将此评论作为答案提交,我将确认这是答案。我一直在以非常线性的方式将它们混合在一起,但您说的应该有更小的独立进程是正确的。这将使以后的事情更易于维护。我很快会再看一眼(我有一个相关的bug要修复)。再次感谢。