web-dev-qa-db-ja.com

Angular $ http POST

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サービスの専門家ではありませんが、シリアル化の問題だと思います。

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

21
axvo

この投稿 によると、あなたは正しい、これはシリアル化についてです。 Angularはデータを自動的にシリアル化しません 、送信する前にデータを解析する必要があります:

...

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

JQueryを使用しない場合は、独自の$.parseここにスニペット があるか、または jQuery実装を適応させる があります。

34
Caio Cunha
angular.toJson(data)

の代わりに動作するはずです

$.param(data)
20
fauverism

fauverism が正しい場合、angular.toJson(data)を使用できます。代わりにではなく、しかし$ .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

$ httpParamSerializerまたは$ httpParamSerializerJQLikeを使用できます

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