Передайте массив данных из Angular $http POST - программирование
Подтвердить что ты не робот

Передайте массив данных из 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 Внутреннюю ошибку сервера.
Я не знаю, почему это не работает. Я не эксперт по веб-сервису, но я думаю, что это проблема сериализации.

Может кто-нибудь мне помочь?

4b9b3361

Ответ 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),
)