Stack Overflow is a community of 4.7 million programmers, just like you, helping each other.

Join them; it only takes a minute:

Sign up
Join the Stack Overflow community to:
  1. Ask programming questions
  2. Answer and help your peers
  3. Get recognized for your expertise

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?

share|improve this question
    
what data format your webservice is expecting ? – Ajay Beniwal Apr 29 '13 at 9:35
    
My web service expects JSON – axvo Apr 29 '13 at 12:00
    
If you are facing AngularJS specific serialization problem, then httpParamSerializerJQLike is what you need. Take a look at stackoverflow.com/questions/33852190/… – VivekDev Nov 24 '15 at 4:50
up vote 19 down vote accepted

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.

share|improve this answer
1  
Thank for your answer, but $.param doesn't work, an error says it's not defined – axvo Apr 29 '13 at 12:00
2  
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. – Caio Cunha Apr 29 '13 at 12:07
    
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... – axvo Apr 29 '13 at 14:08
angular.toJson(data)

should work in place of

$.param(data)
share|improve this answer
    
This should be a comment? – Rimian Sep 24 '15 at 5:54

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");
    });
}

}

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.