AngularJS - 在POST请求正文中发送数据

时间:2015-05-06 07:47:15

标签: javascript angularjs rest post

我正在尝试将POST请求正文中的数据发送到我的AngularJS应用程序中的RESTful API。

此请求的当前结构是控制器,它会抓取数据并将其发送到服务,然后从其关联的工厂调用该请求,如下:

控制器

userService.saveReport(vm.user.id, searchParams)

服务

service.saveReport = function (id, searchData) {
      var deferred = $q.defer();

      user.saveReport({ userID: id, searchData: searchData }, function(response) {
        deferred.resolve(response);
      }, function(e) {
        deferred.reject(e);
      });

      return deferred.promise;
    };

工厂

    function user($resource, $localStorage, constants) {
    return $resource(constants.API_URL + '/users', { userID: '@userID' }, {
      getReports: {
        method: 'GET',
        url: constants.API_URL + '/users/:userID/reports',
        format: 'json',
        headers: {
          'Accept': 'application/vnd.abp.v1+json',
          'X-Mode': function() {
            return $localStorage.get('mode');
          }
        }
      },
      saveReport: {
        method: 'POST',
        url: constants.API_URL + '/users/:userID/reports',
        format: 'json',
        headers: {
          'Accept': 'application/vnd.abp.v1+json',
          'X-Mode': function() {
            return $localStorage.get('mode');
          }
        }
      }
    });
  }

  angular
    .module('abp')
    .factory('user', user);

})();

我已经看到各种帖子,状态$resource允许data:发送以形成请求正文,但这似乎不起作用。我已尝试将searchData: '@searchData'添加到$resource调用所允许的参数中,然后将其添加到数据部分中,如下所示,但这不起作用(为简洁起见):

return $resource(constants.API_URL + '/users', { userID: '@userID', searchData: '@searchData' }, {
    saveReport: {
        method: 'POST',
        url: constants.API_URL + '/users/:userID/reports',
        format: 'json',
        data: ':searchData',
        headers: {
          'Accept': 'application/vnd.abp.v1+json',
          'X-Mode': function() {
            return $localStorage.get('mode');
          }
        }
      }
}

如何在POST请求的正文中发送此请求的数据?

1 个答案:

答案 0 :(得分:3)

好的,我已经设法通过更改我在服务中发送searchData的方式来实现此功能。我的控制器工厂保持不变,但我已将服务更改为以下内容,这似乎非常完美:

service.saveReport = function (id, searchData) {
      var deferred = $q.defer();

      user.saveReport({ userID: id }, searchData, function(response) {
        deferred.resolve(response);
      }, function(e) {
        deferred.reject(e);
      });

      return deferred.promise;
    };