Javascript Ajax Post 包装器

标签 javascript angularjs

我有一个 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/

相关文章:

javascript - Bower 安装软件包的存档版本

javascript - 当我在呈现 View 后设置输入类型的值时,为什么不触发输入类型的更改事件?

javascript - HTTP 拦截器中的 Angular HTTP

javascript - forEach 同时显示图表

javascript - AngularJS 输入类型 = 监视变化的数字的指令

javascript - AngularJS 表格过滤器

带有多个参数的 AngularJS $broadcast

javascript - 谷歌地图 API : Move map center to a position on my page?

javascript - 如何动态设置jqgrid的viewrecords属性?

javascript - 使用 Javascript(真正)实时更新数据