【问题标题】:Pass array of data from Angular $http POST从 Angular $http POST 传递数据数组
【发布时间】:2013-04-29 09:30:31
【问题描述】:

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

有人可以帮我吗?

【问题讨论】:

  • 您的网络服务期望的数据格式是什么?
  • 我的网络服务需要 JSON
  • 如果您面临 AngularJS 特定的序列化问题,那么 httpParamSerializerJQLike 就是您所需要的。看看stackoverflow.com/questions/33852190/…

标签: http rest post angularjs


【解决方案1】:

根据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

【讨论】:

  • 感谢您的回答,但 $.param 不起作用,错误提示未定义
  • 这是一个 jQuery 调用。 AngularJs没有提供开箱即用的解决方案:(。Here is something about it。如果你不使用jQuery,here是一个sn-p来实现编码。我会更新答案。
  • 它适用于一个简单的对象,但对于一个对象数组,它就不起作用了。但是,我认为现在这是一个服务器端的问题......
【解决方案2】:
angular.toJson(data)

应该代替

$.param(data)

【讨论】:

  • 这应该是评论?
【解决方案3】:

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");
    });
}

}

【讨论】:

    【解决方案4】:

    您可以使用 $httpParamSerializer 或 $httpParamSerializerJQLike

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 2013-02-06
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      相关资源
      最近更新 更多