我有一个带有标记ng-submit =“login()
function LoginForm($scope,$http) { $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; $scope.email = "fsdg@sdf.com"; $scope.password = "1234"; $scope.login = function() { data = { 'email' : $scope.email,'password' : $scope.password }; $http.post('resources/curl.PHP',data) .success(function(data,status,headers,config) { console.log(status + ' - ' + data); }) .error(function(data,config) { console.log('error'); }); } }
我从PHP文件得到200 OK回应,但是,返回的数据说,电子邮件和密码是未定义的。这是所有的PHP我有
<?PHP $email = $_POST['email']; $pass = $_POST['password']; echo $email; ?>
任何想法为什么我得到未定义的POST值?
编辑
我想指出,因为这似乎是一个流行的问题(但它是旧的),.success和.error已被弃用,你应该使用.then作为@james Gentes指出在commments
angularjs .post()将Content-type头部默认为application / json。您正在覆盖此以传递表单编码的数据,但是您不会更改您的数据值以传递适当的查询字符串,因此PHP不填充$ _POST,正如您所期望的。
我的建议是只使用application / json的默认angularjs设置为标题,在PHP中读取原始输入,然后反序列化JSON。
这可以在PHP中实现这样:
$postdata = file_get_contents("PHP://input"); $request = json_decode($postdata); $email = $request->email; $pass = $request->password;
或者,如果您严重依赖于$ _POST功能,您可以形成一个查询字符串,如email=someemail@email.com\u0026amp; password = somepassword,并将其作为数据发送。确保此查询字符串是URL编码的。如果手动构建(相对于使用像jQuery.serialize()),Javascript的encodeURIComponent()应该为你做的伎俩。