Javascript 使用$http(REST)从表单发布数据

Javascript 使用$http(REST)从表单发布数据,javascript,angularjs,rest,crud,angular-services,Javascript,Angularjs,Rest,Crud,Angular Services,我正在尝试使用Angular进行CRUD操作,但向服务器发送POST请求时遇到一些问题 这是我的控制器: angular.module('myModule').controller("ListingCtrl", function($scope, posts) { $scope.addProject = function () { if (!$scope.title || $scope.title === '') { return;

我正在尝试使用Angular进行CRUD操作,但向服务器发送POST请求时遇到一些问题

这是我的控制器:

angular.module('myModule').controller("ListingCtrl", function($scope, posts) {

    $scope.addProject = function () {
        if (!$scope.title || $scope.title === '') {
            return;
        }
        posts.create({
            title: $scope.title,
            short_description: $scope.short_description
        });
        $scope.title = '';
        $scope.short_description = '';
    };

});
这是我的服务:

angular.module('myModule', [])
.factory('posts', [
    '$http',
    function($http){
    var o = {
        posts: []
    };
    return o;
}]);

o.create = function(post) {
    return $http.post('linktomyliveAPI', post).success(function(data){
        o.posts.push(data);
    });
};
最后,这里是观点:

<div ng-controller="ListingCtrl">

<form ng-submit="addProject()">
    <input type="text" ng-model="title"></input>
    <input type="text" ng-model="short_description"></input>
    <button type="submit">Post</button>
</form>

邮递

我已经能够成功地发出GET请求,但由于某些原因,我无法理解POST

如果有必要的话,我的API是使用Django Rest框架构建的


谢谢

我认为您添加create方法的方式不合适,您必须在factory对象上添加该方法

将create方法放在从工厂返回的对象上

为您效劳

angular.module('myModule', [])
  .factory('posts', ['$http',function($http){
      var create = function(post) {
          return $http.post('linktomyliveAPI', post).success(function(data){
            o.posts.push(data);
          });
      };

      var o = {
         posts: [],

         // expose create method on factory object
         create: create
      };

      return o;
}]);
希望这些能解决您的问题。

解决了它


我必须更改一些服务器端设置才能正常工作。

浏览器控制台中有错误吗?您面临的问题是什么?列出你的控制台错误?不。看起来请求只是没有被发送@阿拉文德:没有任何控制台错误。我应该将$log添加到我的服务吗?错误代码?如果可能,添加您的控制台的屏幕截图
o
完全超出您尝试分配
o.create
的范围。对于~“未捕获引用错误:未定义o”,您肯定会有控制台错误