Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

HTTP POST não funciona

Olá, estou tentando enviar um post para uma página PHP porém ele chega em branco, mesmo eu colocando JSON.stringify().

Controller

angular.module('app').controller('Teste', function($scope, $http) {
    $scope.dados = [];
    $scope.submit = function() {

        var promise =  $http.post('URL', $scope.dados);
        promise.then(function(event) {
            console.log(event.data);
            console.log(event);
        }).catch(function(error){
            console.log(error);
        });
    }; 
});

Lembrando que já tentei usa ($scope.dados = {};) e a url para qual estou enviando o post está no mesmo servidor, tentei utiliza (success) no lugar do (then) porém da um error (TypeError: $http.post(...).success is not a function)

Código PHP

<?php print_r($_POST); ?>

Console

Array [  ]  
Object { data: Array[0], status: 200, headers: wd/<(), config: Object, statusText: "OK" }

Pesquisei na internet seria algo com um config dos headers que está faltando definir porém não entendi ao certo.

3 respostas

opa, provavelmente vc precisa habilitar o cors no lado da aplicação php.. tem que ver como fazer isso no seu apache... outra coisa, mais simples, é verificar se o $scope.dados está com todos os dados.

O $scope.dados está com todos os dados sim eu verifiquei isso.

<access origin="*"/>

Já está hábilitado no config.xml

O estranha é que usando GET ele funciona perfeitamente, se eu uso o POST do (new XMLHttpRequest()) também funciona.

Obs. estou usando o AngularJS v1.6.4

solução!

Finalmente depois de quebra a cabeça com isso o dia todo e de muito, muito, mmmuuuuito trabalho conseguir arruma, basicamente é bem parecido com jQuery

controle:

angular.module('app').controller('Teste', function($scope, $http, $httpParamSerializer) {
    $scope.dados = {};
    $scope.submit = function() {
        $http({
            method : 'POST',
            url : 'URL',
            data: $httpParamSerializer($scope.dados),
            headers : {'Content-Type': 'application/x-www-form-urlencoded'}  
        }).then(function(event){
            console.log(event.data);
        }).catch(function(error){
            console.log(error);
        });
    }; 
});

Pode ser usado o $httpParamSerializerJQLike no lugar do $httpParamSerializer que sinceramente não sei a diferença. Para saber mais https://docs.angularjs.org/api/ng/service/$httpParamSerializerJQLike

Sobre o usar o (success) no lugar do (then) não sei porque porém só funciona com angular na versão antiga.

Para quem eu ajudei que esteja vendo esse post, quero que sabia que isso deu muuuuuuito trabalho mesmo ;)