это мой первый раз с AngulerJS. Я пытаюсь POST
данные POST
на сервер.
Код AngularJS
var app = angular.module("myApp", []); var BASE_URL = "http://localhost/project/api/Data/"; var GET_DATA = BASE_URL+"get_data"; console.log(GET_DATA); app.controller('myCtrl', function($scope, $http) { var inputs = { "user_id": "3"}; var config = { headers : { 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;' } } $http.post(GET_DATA , inputs, config) .success(function (response, status, headers, config) { $scope.content = response.error; $scope.statuscode = response.status; $scope.statustext = response.statusInfo; console.log(response); }) .error(function (data, status, header, config) { $scope.ResponseDetails = "Data: " + data + "<hr />status: " + status + "<hr />headers: " + header + "<hr />config: " + config; }); });
Этот код отправляет данные на сервер, но с каким-то проводным форматом. Ниже мой print_r($_POST);
результат:
Array ( [{"user_id":"3"}] => [0] => )
это неправильный результат, я ожидаю чего-то вроде
Array ( user_id => 3 )
Примечание. Я использую структуру CodeIgniter на стороне сервера.
Вы можете отправить свои данные в json
:
$http.post(GET_DATA , {"user_id": "3"}) .success(function (response, status, headers, config) { $scope.content = response.error; $scope.statuscode = response.status; $scope.statustext = response.statusInfo; console.log(response); }) .error(function (data, status, header, config) { $scope.ResponseDetails = "Data: " + data + "<hr />status: " + status + "<hr />headers: " + header + "<hr />config: " + config; }); });
И на стороне сервера вы можете получить такие данные:
$postdata = json_decode(file_get_contents('php://input')); print_r($postdata);
Вы должны кодировать свои данные в теле сообщения в urlencoded
формате, когда типом содержимого запроса является application / x-www-form-urlencoded`. Что должно быть так:
var inputs = 'student_id=3';
Хотя неправильная практика заключается в написании ответа на старый вопрос, но я хочу опубликовать этот ответ, чтобы другие могли получать помощь, когда это требуется.
Во-первых, поймите, почему это происходит. Причина в том, что AngularJS не сериализует данные (параметры), переданные в запрос POST автоматически. Поэтому мы должны сериализовать данные с помощью $httpParamSerializerJQLike
который доступен как служба AngularJS. Также стандартным типом контента размещенных данных является application / json. Поэтому нам нужно переопределить заголовки Content-type почтового запроса в application / x-www-form-urlencoded, чтобы получить доступ к опубликованным значениям через $ _POST.
Теперь в угловом режиме также предоставляется $httpParamSerializer
но разница $httpParamSerializerJQLike
– это что-то объект, также содержащий другой объект, поэтому, если используется прежний, тогда внутренний объект не будет сериализован, т. $httpParamSerializer
Все вложенные объекты не будут сериализованы с помощью $httpParamSerializer
но это это не относится к $httpParamSerializerJQLike
.
Вы можете проверить разницу здесь: AngularJS $ httpParamSerializer service DOC
Теперь, вместо того, чтобы json
кодировать и декодировать данные в php
, мы можем сделать это в самой Angular JS, используя сервис $httpParamSerializerJQLike
в угловом JS таким образом:
$http({ url: myUrl, //post your url here method: 'POST', data: $httpParamSerializerJQLike({ 'user_id': '3'}), headers: { 'Content-Type': 'application/x-www-form-urlencoded' } });
И в codeigniter вы можете получить эти опубликованные данные с помощью обычного синтаксиса, т.е. $this->input->post('user_id');
Для получения дополнительной информации … вы можете ссылаться на указанную выше ссылку …
Надеюсь, это может помочь вам ….