AngularJS$http.post方法不向Grails操作发送数据

AngularJS$http.post方法不向Grails操作发送数据,angularjs,grails,Angularjs,Grails,我的Grails应用程序不接收来自angularjs post请求的数据 我的AngularJS控制器是: module.controller('MemberCtrl', ['$scope', '$http', function ($scope, $http) { $scope.submitForm = function () { $http.post(uri + "receiveNewMember", $scope.member)

我的Grails应用程序不接收来自angularjs post请求的数据

我的AngularJS控制器是:

module.controller('MemberCtrl', ['$scope', '$http',
    function ($scope, $http) {

        $scope.submitForm = function () {
            $http.post(uri + "receiveNewMember", $scope.member)
            .success(function (data) {
                console.log("Data Sent With Success! " + data);
            })
            .error(function (data) {
                console.log("Fail");
            });
        };

    }]);
我的Grails行动是:

def receiveNewMember(){
    render text: params.name
}
调试器停止运行。但params变量除了控制器和操作之外没有任何数据


有人知道如何解决这个问题吗?

可以通过Grails Controller中的request.JSON访问Post数据。

您可以这样做来模拟Grails的工作方式:

我还创建了一个序列化程序工厂,以在grails上按预期方式序列化任何类型的javascript对象:

(function() {
    'use strict';
    angular.module('app').factory('Serializer', function ($filter) {
        function SerializerService(){}
        var serializerService = new SerializerService();
        serializerService.excludedProperties = ['$$hashKey'];
        SerializerService.prototype.serialize = function(object){
            var results = {};
            this.serializeObject(results, object, "");
            return results;
        };
        SerializerService.prototype.serializeObject = function(results, object, nameAtTheMoment){
            if($.isArray(object)){
                var array = object;
                for (var i=0; i<object.length; i++){
                    var newNameAtTheMoment = nameAtTheMoment + "[" + i.toString() + "]";
                    this.serializeObject(results, array[i], newNameAtTheMoment)
                }
            }
            else{
                if(Object.prototype.toString.call( object ) === "[object Object]"){
                    var i=0;
                    for(var property in object){
                        if (object.hasOwnProperty(property) && this.excludedProperties.indexOf(property) == -1) {
                            var newNameAtTheMoment;
                            if(nameAtTheMoment !== "")
                                newNameAtTheMoment = nameAtTheMoment + "." + property;
                            else
                                newNameAtTheMoment = property;

                            this.serializeObject(results, object[property], newNameAtTheMoment);
                            i++;
                        }
                    }
                }
                else{ //the object is a simple value
                    if(Object.prototype.toString.call(object) === '[object Date]'){
                        var dateServerFormat = window.appConfig.dateServerFormat;
                        results[nameAtTheMoment] = $filter('date')(object, dateServerFormat);
                    }
                    else
                        results[nameAtTheMoment] = object;
                }
            }
        };
        return serializerService;
    });
})();

你从哪里得到这个uri?里面是什么?@IgorArtamonov uri=/app/controller/。AngularJS可以调用该操作,但操作中的params不包含发送的数据。您是否尝试在http段中将其更改为.get而不是.post?你是说结果以JSON的形式返回?如果是这样,您是否尝试使用JSON解析参数?
angular.module('app', [...])
    .config(function ($provide, $httpProvider) {
        var serializer;
        // Trick to inject dependencies on the config function.
        $provide.factory('FactoryInjector', function () {
            return {
                setSerializer: function(serializerParam){
                    serializer = serializerParam;
                }
            };
        });

        $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
        $httpProvider.defaults.transformRequest = [function(data) {
            return angular.isObject(data) && String(data) !== '[object File]' ? $.param(serializer.serialize(data)) : data;
        }];

    })

    .run(function ($rootScope, $state, $stateParams, Serializer, FactoryInjector) {
        $rootScope.$state = $state;
        $rootScope.$stateParams = $stateParams;

        FactoryInjector.setSerializer(Serializer);
    });