Andurit
Andurit

Reputation: 5762

Angular - send HTTP post data to server [HOW TO]

I'm trying to send data from my login FORM to backend writen in PHP using POST method.

my Angular code looks like:

$scope.getToken = function(){
    // console.log $scope.login to make sure I'm not sending empty data
    console.log($scope.login);
    $http({
        method: 'POST',
        url: '../../api/v1/Oauth.php',
        data: { 'login' : $scope.login, 'password' : $scope.password }
    }).then(function successCallback(response) {
        console.log(response);
    }, function errorCallback(response) {
       console.log(response);
    });
};

and after that I try to catch it on my PHP:

if((isset($_POST['login']) AND isset($_POST['password'])))
{
    $username = $_POST['login'];
    $password = $_POST['password'];
    echo $username;
}
else
    var_dump($_POST);

This statement always go to else and return empty array. Can someone advise me what I'm doing wrong or how can I debug this? Because it looks that I send data fron angular correctly but it didn't come to server.

Thanks Kind Regards Andurit

Upvotes: 1

Views: 681

Answers (4)

Sean Larkin
Sean Larkin

Reputation: 6430

Some older server side web libraries like Coldfusion/.NET/PHP have issues grabbing a POST BODY by default (which is how $http sends the data).

You can reference How to get body of a POST in php? to learn how to write your PHP in a way that it will accept the current and correct standard of sending data via a post.

To access the entity body of a POST or PUT request (or any other HTTP method):

$entityBody = file_get_contents('php://input');

Also, the STDIN constant is an already-open stream to php://input, so you can alternatively do:

$entityBody = stream_get_contents(STDIN);

Upvotes: 2

Alex Repeckiy
Alex Repeckiy

Reputation: 173

$http.post('url', {login: 'Alex', password: 'qwerty'}).then(function(){},function(){});

Upvotes: 0

schellingerht
schellingerht

Reputation: 5806

Use this:

json_decode(file_get_contents('php://input'));

Check your network tab in your developer bar. You can see that you send payload data in the http body. That's why the $_POST array is empty.

Upvotes: 3

pQuestions123
pQuestions123

Reputation: 4611

try:

data: { login : $scope.login, password : $scope.password }

Upvotes: 0

Related Questions