23

我需要将一组对象从我的 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 内部服务器错误。
我不知道为什么它不起作用。我不是专业的网络服务专家,但我认为这是一个序列化问题。

有人能帮我吗?

4

4 回答 4

34

根据这篇文章,你是对的,这是关于序列化的。Angular 不会为您自动序列化数据,您需要在发送数据之前对其进行解析:

...

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

如果您不使用 jQuery,则需要滚动自己的$.parse. 这里有一个片段,或者您可以调整 jQuery 实现

于 2013-04-29T10:28:54.103 回答
21
angular.toJson(data)

应该代替

$.param(data)
于 2014-12-01T21:57:47.463 回答
8

野兽派是对的,你可以使用 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");
    });
}

}

于 2015-06-13T22:43:03.740 回答
3

你可以使用 $httpParamSerializer 或 $httpParamSerializerJQLike

$http(
    url: 'myURL',
    method: "POST",
    data: $httpParamSerializer(data),
)
于 2016-07-12T07:20:58.577 回答