Я выбираю два поля ( month and origin
) в форме и отправляю их на контроллер AngularJS
, я использую версию 1.3.13, упакованную с Ionic framework.
Наблюдая за console.log
внутри метода, значения заполняются правильно.
q.promisse
имеет это значение: [object, object]
.
Список HTML
шаблона не заполняется строгими ожидаемыми значениями.
Значения не заполняют переменную PHP POST
в PHP API
.
Как я могу заполнить данные POST
?
В моем шаблоне я отправляю метод search
:
<form method="post" ng-controller="AcpSearchCtrl" ng-submit="search(data)"> <select name="month" ng-model="data.month"> <option value="01">January</option>
И в моем контроллере o используйте http.post
и promisse
:
.controller('AcpSearchCtrl', function($scope, ApiAcpSearch, $ionicLoading, $timeout, $http, ApiAcpEndpoint, $q) { $scope.search = function(data) { $ionicLoading.show({ noBackdrop: false, template: '<p>searching ...</p>' }); var q = $q.defer(); $scope.formData = {}; $scope.submission = false; var param = function(data) { var returnString = ''; for (d in data){ if (data.hasOwnProperty(d)) returnString += d + '=' + data[d] + '&'; } return returnString.slice( 0, returnString.length - 1 ); }; console.log('formData : '+$scope.formData); return $http({ url:ApiAcpEndpoint.url, data : param($scope.formData), method : 'POST', headers : {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} }) .then(function(data) { q.resolve(data); var acp = {}; acp.qdata = [ data ]; $scope.data = acp.qdata; $ionicLoading.hide(); return q.promise; }); } })
AngularJS по умолчанию отправляет данные в формате JSON. Вы не найдете его в обычных глобальных глобалах ($ _REQUEST, $ _POST или $ _GET).
У вас есть два способа решить эту проблему:
Установите по умолчанию Content-Type глобально для AngularJS (просто установите заголовок до того, как запрос не будет работать).
var app = angular.module("app", []); app.config(['$httpProvider', function($httpProvider) { $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; $httpProvider.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"; }]);
Альтернативой является то, что вы обрабатываете способ, которым AngularJS отправляет данные в PHP:
$angularJSData = json_decode(file_get_contents("php://input")); // json_decode will create an object so if you need in array format $angularJSData = (array)$angularJSData;
С помощью этих знаний вы можете создать функцию или даже свою собственную глобальную.