Передайте массив данных из Angular $http POST
Мне нужно передать массив объектов из моего приложения Angular в веб-службу .NET с помощью платформы Nancy.
Я пробовал это:
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 Внутреннюю ошибку сервера.
Я не знаю, почему это не работает. Я не эксперт по веб-сервису, но я думаю, что это проблема сериализации.
Может кто-нибудь мне помочь?
Ответы
Ответ 1
Согласно этому сообщению, вы правы, речь идет о сериализации. Angular не выполняет автоматическую сериализацию данных для вас, вам необходимо проанализировать данные перед отправкой:
...
$http({
url: 'myURL',
method: "POST",
data: $.param(data),
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
})...
Если вы не используете jQuery, вам нужно свернуть свой $.parse
. Здесь есть фрагмент, или вы можете адаптировать реализацию jQuery.
Ответ 2
angular.toJson(data)
должен работать вместо
$.param(data)
Ответ 3
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");
});
}
}
Ответ 4
вы можете использовать $httpParamSerializer или $httpParamSerializerJQLike
$http(
url: 'myURL',
method: "POST",
data: $httpParamSerializer(data),
)