I need to pass an array of object from my Angular application to a .Net web service with Nancy framework.
I tried this :
function TestCtrl($scope, $http){
$scope.postTest = function(){
var data = [obj1, obj2, obj3];
$http({
url: 'myURL',
method: "POST",
data: data,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}).success(function(data){
alert("done");
});
}
}
But server send 500 Internal server error.
I don't know why it doesn't work. I'm not an expert web service expert but I think it's a serialization problem.
Can someone help me?
According to this post, you're right, this is about serialization. Angular doesn't automatic serialize the data for you, you need to parse the data before sending it:
...
$http({
url: 'myURL',
method: "POST",
data: $.param(data),
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
})...
If you don't use jQuery, you'll need to roll your own $.parse
. There is a snippet here or you could adapt jQuery implementation.
fauverism is right, you can use angular.toJson(data). Not instead, but before $.param though.
function TestCtrl($scope, $http){
$scope.postTest = function(){
var data = [obj1, obj2, obj3];
var jsonData=angular.toJson(data);
var objectToSerialize={'object':jsonData};
$http({
url: 'myURL',
method: "POST",
data: $.param(objectToSerialize),
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}).success(function(data){
alert("done");
});
}
}
you can use $httpParamSerializer or $httpParamSerializerJQLike
$http(
url: 'myURL',
method: "POST",
data: $httpParamSerializer(data),
)