Angularjs – Form Post Данные не отображаются?

Должен признаться, я немного смущен … Я никогда не делал этого раньше, и я, очевидно, что-то пропустил

Когда я передаю данные через http.post в свой php-файл, я не могу собирать данные …

Может ли кто-нибудь сказать мне, почему это не работает?

FormData отображается в консольном журнале, и файл записывается точно. Однако похоже, что данные не передаются.

$scope.submitForm = function() { formData = $scope.form; $http.post('form2.php', JSON.stringify(formData)).success(function(){ console.log(formData); //window.location.href = "form2.php?data=" + JSON.stringify(formData); }); }; 

Это в моем php-файле .. пытается записать данные из представленной формы в файл … (просто тестирование) ..

  <?php $file = 'form2.txt'; $data = json_decode($_REQUEST['data'],true); //print( '<pre>' ); //print_r ($data); //print( '</pre>' ); $data_insert = "Name: " . $data['firstname'] . ", Email: " . $data['emailaddress'] . ", Description: " . $data['textareacontent'] . ", Gender: " . $data['gender'] . ", Is Member: " . $data['member']; //print $data_insert; file_put_contents($file, $data_insert, FILE_APPEND | LOCK_EX); ?> 

Related of "Angularjs – Form Post Данные не отображаются?"

Проведя довольно некоторое исследование, я обнаружил, что это скорее проблема с php-спецификой. И я нашел ответы на эти два сообщения.

здесь: Угловая HTTP-почта для PHP и неопределенные

и здесь: http://sebgoo.blogspot.ca/2013/05/angularjs-post-data-to-php.html

Мой последний PHP-код выглядит так.

  $file = 'form2.txt'; $postdata = file_get_contents("php://input"); $data = json_decode($postdata, true); $data_insert = "Name: " . $data['firstname'] . ", Email: " . $data['emailaddress'] . ", Description: " . $data['textareacontent'] . ", Gender: " . $data['gender'] . ", Is a member: " . $data['member']; //print $data_insert; file_put_contents($file, $data_insert, FILE_APPEND | LOCK_EX); 

Я также хотел бы поблагодарить Майка Бранта ( https://stackoverflow.com/users/1529853/mike-brant ), решение которого со ссылкой на столбец было очень полезно. Я тоже проголосовал за его ответ.

Мой угловой код приложения выглядит примерно так … и это отличное улучшение от оригинального благодаря artur grzesiak ( https://stackoverflow.com/users/2956115/artur-grzesiak )

 var app = angular.module('myApp', []); app.controller('FormCtrl', function ($scope, $http) { var formData = { firstname: "default", emailaddress: "default", textareacontent: "default", gender: "default", member: false }; $scope.submitForm = function() { $http({ url: "form2.php", data: $scope.form, method: 'POST', headers : {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} }).success(function(data){ console.log("OK", data) }).error(function(err){"ERR", console.log(err)}) }; }); 

Наконец, форма HTML, которая использовалась для отправки этой формы, выглядит примерно так …

 <div ng-app="myApp"> <form ng-controller="FormCtrl" ng-submit="submitForm()"> First name: <br/><input type="text" ng-model="form.firstname"> <br/><br/> Email Address: <br/><input type="text" ng-model="form.emailaddress"> <br/><br/> Description:<br/> <textarea rows="3" cols="25" ng-model="form.textareacontent"></textarea> <br/> <input type="radio" ng-model="form.gender" value="female" />Female ... <input type="radio" ng-model="form.gender" value="male" />Male <br/> <br/> <input type="checkbox" ng-model="form.member" />Already a member <br/> <input type="submit" ngClick="Submit" > </form> </div> 

Спасибо всем, кто помог!

Если вы хотите использовать $ _POST в php и не включать jquery и использовать такие функции, как $ .param (), для чистых anjularjs вам следует изменить app.js и добавить следующие строки:

 .config( [ '$httpProvider', function ( $httpProvider ) { // Use x-www-form-urlencoded Content-Type $httpProvider.defaults.headers.post[ 'Content-Type' ] = 'application/x-www-form-urlencoded;charset=utf-8'; /** * The workhorse; converts an object to x-www-form-urlencoded serialization. * @param {Object} obj * @return {String} */ var param = function ( obj ) { var query = '', name, value, fullSubName, subName, subValue, innerObj, i; for ( name in obj ) { value = obj[ name ]; if ( value instanceof Array ) { for ( i = 0; i < value.length; ++i ) { subValue = value[ i ]; fullSubName = name + '[' + i + ']'; innerObj = {}; innerObj[ fullSubName ] = subValue; query += param( innerObj ) + '&'; } } else if ( value instanceof Object ) { for ( subName in value ) { subValue = value[ subName ]; fullSubName = name + '[' + subName + ']'; innerObj = {}; innerObj[ fullSubName ] = subValue; query += param( innerObj ) + '&'; } } else if ( value !== undefined && value !== null ) query += encodeURIComponent( name ) + '=' + encodeURIComponent( value ) + '&'; } return query.length ? query.substr( 0, query.length - 1 ) : query; }; // Override $http service's default transformRequest $httpProvider.defaults.transformRequest = [ function ( data ) { return angular.isObject( data ) && String( data ) !== '[object File]' ? param( data ) : data; } ]; }] )