我有一个angularjs项目,我建立了一个ajaxService
,它基本上围绕$http.post()
。我想要实现的是一种简单的服务,在发生错误时创建警报,但覆盖.error()
函数不应删除此警报(我希望它可以被调用,无论如何)。起初,我只是回复了$http.post()
的承诺,但是当覆盖.error()
时,删除了.error()
服务的实施。Javascript Ajax Post封装
首先,我有这样实现:
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
'。这不是我所期望的,'undefined
'的原因是什么,我该如何解决这个问题?
签名是不正确...'后(网址,数据,[配置]); '参见文档 – charlietfl
您的代码将返回undefined为obj,因为$ http.post是异步的。改为承诺。为了处理http请求中的错误,你可能需要考虑http拦截器。 – glennanthonyb