我有一个 angularjs 项目,我在其中构建了一个 ajaxService
,它基本上围绕一个 $http.post()
。我想要实现的是一个简单的服务,可以在出现错误时创建警报,但是覆盖 .error()
函数不应删除此警报(我希望无论什么情况都可以调用它)什么)。起初,我只是返回了 $http.post()
的 promise ,但是在 .error()< 时删除了服务的
被覆盖。 .error()
实现
首先我有这个实现:
this.Post = function (url, data) {
return $http.post(
'Server/Server.php',
{ 'url': url, 'data': data }
)
.error(function (response) {
alertsService.RenderErrorMessage(response);
});
}
但是如果您随后实现以下代码,则 RenderErrorMessage()
将不会被调用(它会被覆盖):
ajaxService.Post(ajaxUrlService.GetUserGroupsByUser(), { 'userId': userService.id })
.error(function (response) {
userService.groups = response;
});
为了解决这个问题,我尝试了以下方法:
this.Post = function (url, data) {
var obj = new Object();
obj.success = function (response) {};
obj.error = function (response) {};
$http.post(
'Server/Server.php',
{ 'url': url, 'data': data }
)
.success(function (response) {
if (typeof response == "String" && response.indexOf('xdebug-error') > 0) {
alertsService.RenderErrorMessage(response);
obj.error(response);
}
else {
obj.success(response);
}
})
.error(function (response) {
alertsService.RenderErrorMessage(response);
obj.error(response);
});
return obj;
}
.Post()
不返回 obj
,它返回“undefined
”。这不是我所期望的,导致“未定义
”的原因是什么?我该如何解决这个问题?
最佳答案
如果我理解正确的话,您希望在服务内部对错误执行一些特殊处理,但允许错误也在服务外部进行处理。
https://jsbin.com/bepozi/edit?html,js,console,output
该示例用另一个 Promise“包装”$http
Promise。 “内部 promise ”执行一些特殊处理(写入控制台)。然后,AppController
还能够通过将错误写入模型来执行其自己的错误处理。
但是,对于 http 请求中的通用错误处理,我个人会使用 http interceptor .
关于Javascript Ajax Post 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32949356/