Pass array of data from Angular $http POST
Solution 1
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.
Solution 2
angular.toJson(data)
should work in place of
$.param(data)
Solution 3
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");
});
}
}
Solution 4
you can use $httpParamSerializer or $httpParamSerializerJQLike
$http(
url: 'myURL',
method: "POST",
data: $httpParamSerializer(data),
)
Related videos on Youtube
axvo
Updated on July 18, 2022Comments
-
axvo almost 2 years
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?
-
Ajay Beniwal about 11 yearswhat data format your webservice is expecting ?
-
axvo about 11 yearsMy web service expects JSON
-
VivekDev over 8 yearsIf you are facing AngularJS specific serialization problem, then httpParamSerializerJQLike is what you need. Take a look at stackoverflow.com/questions/33852190/…
-
-
axvo about 11 yearsThank for your answer, but $.param doesn't work, an error says it's not defined
-
Caio Cunha about 11 yearsThis is a jQuery call. AngularJs doesn't provide a solution out of the box :(. Here is something about it. If you don't use jQuery, here is a snippet to achieve the encoding. I'll update the answer.
-
axvo about 11 yearsit works fine for a simple object, but with an array of objects, it doesn't work. However, I think now it's a server-side problem...
-
Muhammad Hashir Anwaar over 8 yearsThis should be a comment?