AngularJS i $_POST

facebooktwittergoogle_plusredditpinterestlinkedinmail

Wysyłając dane z aplikacji AngularJS do serwera korzystającego z PHP, zapewne napotkaliśmy na problem z pustą tablicą $_POST.

Tablica $_POST umożliwia odczytanie wysłanych danych, jeśli ich ContentType to application/x-www-form-urlencoded lub multipart/form-data. AngularJS w domyślnej konfiguracji wysyła dane z ContentType o wartości application/json.

Powyższy problem możemy rozwiązać na dwa sposoby.

1. Zmieniając ContentType używany przy wysyłce danych w konfiguracji AngularJS (wykorzystamy do tego metody $.param z biblioteki jQuery):

angular.module('exampleApp').config([
      '$httpProvider',
      function ($httpProvider) {
           $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
           $httpProvider.defaults.transformRequest = function (data){
                return typeof data !== 'undefined' ? $.param(data) : data;
           };
      }
]);

2. Używając file_get_contents(‚php://input’) zamiast $_POST na backend’zie

$data = file_get_contents('php://input');
$data = json_decode($data, true);
echo $data['name'];

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

13 − 7 =

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>