2013-04-29 25 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), 
)