2013-04-29 5 views
20

Muszę przekazać tablicę obiektów z mojej aplikacji Angular do usługi sieciowej .NET ze strukturą Nancy.

Próbowałem to:

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

serwer Ale wysłać 500 wewnętrzny błąd serwera.
Nie wiem, dlaczego to nie działa. Nie jestem ekspertem od usług internetowych, ale myślę, że jest to problem z serializacją.

Czy ktoś może mi pomóc?

+1

jakie dane Format Twoja usługa spodziewa? –

+1

Moja usługa sieci Web oczekuje, JSON – axvo

+0

Jeśli napotkasz problem serializacji AngularJS, a następnie httpParamSerializerJQLike jest to, czego potrzebujesz. Spójrz na http://stackoverflow.com/questions/33852190/angularjs-get-ajax-call-with-array-parameters – VivekDev

Odpowiedz

32

Zgodnie z this post, masz rację, chodzi o serializację. Angular doesn't automatic serialize the data for you, trzeba analizować dane przed wysłaniem go:

... 

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

Jeśli nie używasz jQuery, musisz toczyć własną $.parse. Jest snippet here lub możesz adapt jQuery implementation.

+2

Dziękujemy za odpowiedź, ale $ .param nie działa, błąd mówi, że nie jest zdefiniowany – axvo

+3

To jest połączenie jQuery. AngularJs nie dostarcza rozwiązania po wyjęciu z pudełka :(. [Tutaj jest coś na ten temat] (https://github.com/angular/angular.js/issues/1743) .Jeśli nie używasz jQuery, [ tutaj] (http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object) to fragment kodu do osiągnięcia kodu. Zaktualizuję odpowiedź: –

+0

działa dobrze dla prostego obiektu , ale z szeregiem obiektów, to nie działa, ale myślę, że teraz jest to problem po stronie serwera ... – axvo

15
angular.toJson(data) 

powinien pracować w miejscu, z

$.param(data) 
+2

To powinien być komentarz? – Rimian

9

fauverism ma rację, można użyć angular.toJson (danych). Zamiast tego, ale przed $ .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"); 
    }); 
} 

}

2

można użyć $ httpParamSerializer lub $ httpParamSerializerJQLike

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