从Angular的$http POST方法中传递数据的数组。
从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服务专家,但我认为这是一个序列化问题。
有人可以帮助我吗?
问题的原因是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,这里有一个代码片段可以实现编码。我会更新回答。
对于一个简单的对象,它可以正常工作,但对于一个对象数组,它不起作用。然而,我现在认为这是一个服务器端的问题...
问题出现的原因是在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请求。