I have a form with the tag ng-submit="login()
The function gets called fine in javascript.
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, status, headers, config)
{
console.log('error');
});
}
}
I am getting a 200 OK response back from the PHP file, however, the returned data is saying that email
and password
are undefined. This is all the php I have
<?php
$email = $_POST['email'];
$pass = $_POST['password'];
echo $email;
?>
Any idea why I am getting undefined POST
values?
EDIT
I wanted to point out since this seems to be a popular question (yet it is old), .success
and .error
have been deprecated and you should use .then
as @James Gentes pointed out in the commments
angularjs
.post()
defaults the Content-type header toapplication/json
. You are overriding this to pass form-encoded data, however you are not changing yourdata
value to pass an appropriate query string, so PHP is not populating$_POST
as you expect.My suggestion would be to just use the default angularjs setting of
application/json
as header, read the raw input in PHP, and then deserialize the JSON.That can be achieved in PHP like this:
Alternately, if you are heavily relying on
$_POST
functionality, you can form a query string likeemail=someemail@email.com&password=somepassword
and send that as data. Make sure that this query string is URL encoded. If manually built (as opposed to using something likejQuery.serialize()
), Javascript'sencodeURIComponent()
should do the trick for you.