从Angular的$http POST方法中传递数据的数组。

16 浏览
0 Comments

从Angular的$http POST方法中传递数据的数组。

我需要将一个对象数组从我的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服务专家,但我认为这是一个序列化问题。

有人可以帮助我吗?

0
0 Comments

问题的原因是Angular $http POST方法在发送数据时没有自动进行序列化,导致服务器无法正确解析接收到的数据。解决方法是在发送请求之前手动对数据进行序列化,并设置请求头的Content-Type为application/x-www-form-urlencoded。

根据这个post,你是对的,这个问题是关于序列化的。Angular不能自动为你进行序列化,你需要在发送请求之前对数据进行解析:

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

如果你不使用jQuery,你需要自己编写$.parse方法。这里有一个代码片段,或者你可以参考jQuery的实现。

谢谢你的回答,但是$.param不起作用,报错说未定义。

这是一个jQuery的调用。AngularJs没有提供开箱即用的解决方案: (。在这里有相关的信息。如果你不使用jQuery,这里有一个代码片段可以实现编码。我会更新回答。

对于一个简单的对象,它可以正常工作,但对于一个对象数组,它不起作用。然而,我现在认为这是一个服务器端的问题...

0
0 Comments

问题出现的原因是在Angular的$http POST请求中,需要传递一个数组作为数据,但是直接传递数组会导致请求失败。解决方法是将数组转化为Json字符串,然后再使用$.param方法将其序列化为请求参数。

首先,我们需要定义一个包含多个对象的数组data,例如[obj1, obj2, obj3]。然后,使用angular.toJson方法将数组data转化为Json字符串jsonData。接着,创建一个对象objectToSerialize,将Json字符串jsonData作为属性值赋给objectToSerialize的object属性。最后,通过$http方法发送POST请求,将objectToSerialize序列化为请求参数,同时设置请求头的Content-Type为'application/x-www-form-urlencoded; charset=UTF-8'。

下面是详细的代码示例:

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

通过以上方法,我们可以成功地将数组作为数据传递给Angular的$http POST请求。

0
0 Comments

从上面的内容可以看出,问题出现的原因是在Angular的$http POST请求中,传递数组类型的数据时,使用了错误的方法。应该使用angular.toJson(data)方法来替代$.param(data)方法。

解决方法就是将$.param(data)替换为angular.toJson(data)即可。

0