AngularJS$http.post方法不向Grails操作发送数据
我的Grails应用程序不接收来自angularjs post请求的数据 我的AngularJS控制器是: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)
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);
});