2013-04-29 9 views
20

AngularアプリケーションからNancyフレームワークを使用した.Net Webサービスにオブジェクトの配列を渡す必要があります。

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

しかし、サーバ500内部サーバーエラーを送信します。

は、私はこれを試してみました。
なぜ動作しないのかわかりません。私は熟練したWebサービスの専門家ではないが、シリアライゼーションの問題だと思う。

誰かが私を助けることができますか?

+1

$ httpParamSerializerを使用するか、$ httpParamSerializerJQLikeことができますか? –

+1

私のWebサービスがJSONを期待しています – axvo

+0

AngularJS固有のシリアル化の問題に直面している場合は、httpParamSerializerJQLikeが必要です。 http://stackoverflow.com/questions/33852190/angularjs-get-ajax-call-with-array-parametersを参照してください。 – VivekDev

答えて

32

this postによれば、これはシリアル化に関するものです。 Angular doesn't automatic serialize the data for youは、あなたはそれを送信する前にデータを解析する必要があります。

... 

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

あなたはjQueryのを使用しない場合、あなたは$.parseあなた自身をロールバックする必要があります。 snippet hereまたはadapt jQuery implementationがあります。

+2

回答ありがとうございますが、$ paramは機能しません。エラーは定義されていないと言います – axvo

+3

これはjQuery呼び出しです。 AngularJsは、箱からすぐに解を提供するわけではありません([ここには何かあります](https://github.com/angular/angular.js/issues/1743)。jQueryを使用しない場合、ここで](http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object)は、コードを達成するためのスニペットです。私は答えを更新します。 –

+0

これは、しかし、オブジェクトの配列で、それは動作しません。しかし、私は今それがサーバー側の問題だと思う... – axvo

15
angular.toJson(data) 

$.param(data) 
+2

これはコメントですか? – Rimian

9

fauverismの代わりに動作するはずですあなたがangular.toJson(データ)を使用することができ、権利です。代わりにではなく、$ .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

あなたのWebサービスを期待しているどのようなデータ形式

$http(
    url: 'myURL', 
    method: "POST", 
    data: $httpParamSerializer(data), 
) 
関連する問題