2013-04-29 62 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

什么样的数据格式的web服务期待? – 2013-04-29 09:35:15

+1

我的web服务期望JSON – axvo 2013-04-29 12:00:36

+0

如果您面临AngularJS特定的序列化问题,那么httpParamSerializerJQLike就是您所需要的。看看http://stackoverflow.com/questions/33852190/angularjs-get-ajax-call-with-array-parameters – VivekDev 2015-11-24 04:50:10

回答

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 2013-04-29 12:00:17

+3

这是一个jQuery调用。 AngularJs不提供开箱即用的解决方案:(。[这是关于它的东西](https://github.com/angular/angular.js/issues/1743)。如果你不使用jQuery,[这里](http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object)是实现编码的片段,我会更新答案。 – 2013-04-29 12:07:27

+0

它适用于一个简单的对象,但有一组对象,它不起作用。但是,我认为现在它是一个服务器端问题... – axvo 2013-04-29 14:08:34

15
angular.toJson(data) 

应该在工作的地方

$.param(data) 
+2

这应该是一个评论? – Rimian 2015-09-24 05:54:59

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

可以使用$ httpParamSerializer或$ httpParamSerializerJQLike

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