Pass array of data from Angular $http POST

92,037

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),
)
Share:
92,037

Related videos on Youtube

axvo
Author by

axvo

Updated on July 18, 2022

Comments

  • axvo
    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
      Ajay Beniwal about 11 years
      what data format your webservice is expecting ?
    • axvo
      axvo about 11 years
      My web service expects JSON
    • VivekDev
      VivekDev over 8 years
      If you are facing AngularJS specific serialization problem, then httpParamSerializerJQLike is what you need. Take a look at stackoverflow.com/questions/33852190/…
  • axvo
    axvo about 11 years
    Thank for your answer, but $.param doesn't work, an error says it's not defined
  • Caio Cunha
    Caio Cunha about 11 years
    This 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
    axvo about 11 years
    it 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
    Muhammad Hashir Anwaar over 8 years
    This should be a comment?