AngularJS Невозможно передать данные модели в модель сервера, отображается как пустая строка

Я пытаюсь отправить некоторые простые данные на сервер. Я беру исходно полученные серверные данные, используемые для создания динамических форм, быстро очищаю ненужные ключи с помощью удаления formData['not_needed'], а затем я хотел добавить модель, которая была создана перед публикацией на сервер, но когда я проверяю Ключ модели объектов данных, который я пытаюсь добавить, всегда является пустой строкой. Я могу отправить одно или другое, но не могу добавить один объект к другому в виде пары ключ-значение.

// Abridged version
var formData = $scope.responseData; // original server data to build forms
delete formData['config_data']; // remove unnecessary keys

formData.model = $scope.formModel; // add model key

$http.post('/restful/api', formData).then(function(success) {...}, function(error) {...});

Вывод переданных данных с сервера выглядит так:

{ id: "1", type: "type_of_form", name: "name_of_package", model: "" } // model always empty

Это проблема с использованием $scope?

ОБНОВЛЕНИЕ

Даже когда я жестко кодирую исходящие ключи:

var packageData = {
    "packageid": $scope.formData.id, // makes it to server
    "desc": $scope.formData.desc, // also makes it to server
    "data": $scope.formModel // is just an empty string
}

Но formModel заполняется из каких-то глупых данных формы при входе в консоль и выводе на экран с помощью фильтра { formModel | json } выглядит так:

formModel = {
  "document_date": "1234",
  "first_name0": "1",
  "first_name1": "2",
  "first_name2": "3",
  "first_name3": "4"
}

person mtpultz    schedule 28.10.2014    source источник
comment
если вы выполните console.debug($scope.formModel) и console.debug(formData) непосредственно перед вызовом $http.post(...), что вы получите в консоли?   -  person Sebastian Piu    schedule 28.10.2014
comment
два объекта со всеми их свойствами   -  person mtpultz    schedule 28.10.2014


Ответы (1)


Возможно, вы столкнулись с уже известной ловушкой «AngularJS не может формировать URL-кодировать данные, которые он отправляет POST по умолчанию»; если это так, вам нужно сделать это, прежде чем пытаться опубликовать:

.config(['$httpProvider', function ($httpProvider) {
  // Intercept POST requests, convert to standard form encoding
  $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
  $httpProvider.defaults.transformRequest.unshift(function (data, headersGetter) {
    var key, result = [];
    for (key in data) {
      if (data.hasOwnProperty(key)) {
        result.push(encodeURIComponent(key) + "=" + encodeURIComponent(data[key]));
      }
    }
    return result.join("&");
  });
}]);

через Как я могу опубликовать данные как данные формы вместо полезной нагрузки запроса?

person T.W.R. Cole    schedule 28.10.2014