2013-04-29 5 views
20

Ich muss ein Array von Objekt aus meiner Angular-Anwendung zu einem. Net-Web-Service mit Nancy-Framework übergeben.

Ich versuchte dies:

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

Aber Server 500 Interner Serverfehler senden.
Ich weiß nicht, warum es nicht funktioniert. Ich bin kein Experte für Web-Services, aber ich denke, es ist ein Serialisierungsproblem.

Kann mir jemand helfen?

+1

welche Datenformat Ihre Webservice erwartet verwenden kann? –

+1

Mein Web-Service erwartet JSON – axvo

+0

Wenn Sie mit AngularJS-spezifischem Serialisierungsproblem konfrontiert sind, dann ist httpParamSerializerJQLike das, was Sie brauchen. Sehen Sie sich http://stackoverflow.com/questions/33852190/angularjs-get-ajax-call-with-array-parameters an – VivekDev

Antwort

32

Nach this post, hast du recht, hier geht es um Serialisierung. Angular doesn't automatic serialize the data for you, müssen Sie die Daten analysieren, bevor sie zu senden:

... 

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

Wenn Sie nicht jQuery verwenden, werden Sie Ihre eigenen $.parse rollen müssen. Es gibt eine snippet here oder Sie könnten adapt jQuery implementation.

+2

Danke für Ihre Antwort, aber $ .param funktioniert nicht, ein Fehler sagt, dass es nicht definiert ist – axvo

+3

Dies ist ein jQuery-Aufruf. AngularJs bietet keine Lösung out of the box :(. [Hier ist etwas dabei] (https://github.com/angular/angular.js/issues/1743). Wenn Sie jQuery nicht verwenden, [ hier] (http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object) ist ein Schnipsel, um die Codierung zu erreichen. Ich werde die Antwort aktualisieren. –

+0

es funktioniert gut für ein einfaches Objekt , aber mit einer Reihe von Objekten funktioniert es nicht, aber ich denke, jetzt ist es ein serverseitiges Problem ... – axvo

15
angular.toJson(data) 

sollte

$.param(data) 
+2

Dies sollte ein Kommentar sein? – Rimian

9

fauverism anstelle von Arbeit richtig ist, können Sie angular.toJson (Daten) verwenden. Nicht stattdessen, aber vor $ .param obwohl.

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

Sie $ httpParamSerializer oder $ httpParamSerializerJQLike

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