web-dev-qa-db-fra.com

Passer un tableau de données de Angular $ http POST

J'ai besoin de passer un tableau d'objets de mon Angular vers un service Web .Net avec le framework Nancy.

J'ai essayé ceci:

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

Mais le serveur envoie 500 erreurs de serveur interne.
Je ne sais pas pourquoi cela ne fonctionne pas. Je ne suis pas un expert en services Web, mais je pense que c'est un problème de sérialisation.

Est-ce que quelqu'un peut m'aider?

21
axvo

Selon cet article , vous avez raison, il s'agit de sérialisation. Angular ne sérialise pas automatiquement les données pour vous , vous devez analyser les données avant de les envoyer:

...

$http({
  url: 'myURL',
  method: "POST",
  data: $.param(data),
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
  }
})...

Si vous n'utilisez pas jQuery, vous devrez lancer votre propre $.parse. Il y a un extrait ici ou vous pouvez adapter l'implémentation de jQuery .

34
Caio Cunha
angular.toJson(data)

devrait fonctionner à la place de

$.param(data)
20
fauverism

fauverism a raison, vous pouvez utiliser angular.toJson (data). Pas à la place, mais avant $ .param.

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

}

8
Anastasia Sitnina

vous pouvez utiliser $ httpParamSerializer ou $ httpParamSerializerJQLike

$http(
    url: 'myURL',
    method: "POST",
    data: $httpParamSerializer(data),
)
3
Ben Hsieh