2015-05-06 59 views
1

我想在我的AngularJS應用程序中將POST請求正文中的數據發送到RESTful API。AngularJS - 在POST請求主體中發送數據

我此請求當前結構是控制器其抓住數據和發送給服務,然後調用從其關聯工廠請求,如下所示:

控制器

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呼叫允許PARAMS,然後添加到數據部分具體步驟如下,但這不起作用(濃縮爲簡單起見):

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請求的主體中?

回答

3

好的,所以我現在設法通過改變我發送服務服務。我控制器工廠保持不變,不過我已經改變了服務以下,這似乎萬無一失的工作:

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; 
    }; 
+1

這的確是你的錯誤,請參閱https://docs.angularjs.org/api/ngResource/service/$ resource,描述返回對象的部分:* non-GET「class」actions:'Resource.action([parameters],postData,[success],[error])'*。始終RTFM;) – sp00m