从Angular $ http POST传递数据数组

axv*_*xvo 22 rest post http angularjs

我需要将一个对象数组从我的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");
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

但服务器发送500内部服务器错误.
我不知道为什么它不起作用.我不是专家的网络服务专家,但我认为这是一个序列化问题.

有人能帮我吗?

Cai*_*nha 34

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

...

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

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

  • 这是一个jQuery调用.AngularJs没有提供开箱即用的解决方案:(.[这是关于它的东西](https://github.com/angular/angular.js/issues/1743).如果你不使用jQuery,[这里](http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object)是一个实现编码的片段.我会更新答案. (3认同)
  • 感谢您的回答,但$ .param不起作用,错误表明它没有定义 (2认同)

fau*_*ism 20

angular.toJson(data)
Run Code Online (Sandbox Code Playgroud)

应该代替

$.param(data)
Run Code Online (Sandbox Code Playgroud)

  • 这应该是评论吗? (2认同)

Ana*_*ina 8

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");
    });
}
Run Code Online (Sandbox Code Playgroud)

}