在Angularjs中发送的jQuery ajax相当于什么?

我熟悉Jquery AJAX调用 ,它有不同的回调,如beforeSend,success,complete等。

这是使用Jquery的示例AJAX调用:

$.ajax({ url: 'register.php', type: 'POST', data: {name:name, email:email}, beforeSend: function() { // show loading GIF }, complete: function() { // hide loading GIF }, success: function(data) { // parse response } }); 

我想使用AngularJS实现相同的目标。

对于AngularJS AJAX请求,是否有像beforeSend之类的回调? 到目前为止这是我的代码,但我不知道在哪里可以使用像beforeSend这样的回调(这样我可以在我的代码中显示加载的GIF图像):

 $http.post('register.php', {'name': $scope.name, 'email': $scope.email}) .success(function(data, status, headers, config) { if (data != '') { } }); 

默认情况下,Angular不提供beforeSend和complete,但您可以使用拦截器来实现它们。 这是我的实施:

 (function() { var app = angular.module("app"); app.factory("interceptors", [function() { return { // if beforeSend is defined call it 'request': function(request) { if (request.beforeSend) request.beforeSend(); return request; }, // if complete is defined call it 'response': function(response) { if (response.config.complete) response.config.complete(response); return response; } }; }]); })(); 

然后你必须像这样注册你的拦截器:

  (function () { var app = angular.module('app', ['ngRoute']); app.config(["$routeProvider", "$httpProvider", function ($router, $httpProvider) { // Register interceptors service $httpProvider.interceptors.push('interceptors'); $router.when("/", { templateUrl: "views/index.html" }) .otherwise({ redirectTo: "/" }); }]); })(); 

在此代码之后,您可以像这样使用它:

 var promise = $http({ method: 'POST', url: constants.server + '/emails/send', data: model, beforeSend: function() { model.waiting = true; }, complete: function() { model.waiting = false; } }); 

你可以使用interceptors 。 在Angular $ http文档中搜索单词interceptor

正如文档所述出于全局error handling,>身份validation或任何类型的同步或异步预处理>请求或后处理响应

这是一个很好的小提琴示例 ,在发送ajax调用之前显示加载gif。

编辑

正如Satpal评论的那样, deprecated Fiddle中deprecated $httpProvider.responseInterceptors 。 您应该使用$httpProvider.interceptors