Angular HTTP post到PHP和未定义

前端之家收集整理的这篇文章主要介绍了Angular HTTP post到PHP和未定义前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有标记ng-submit =“login()

函数在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,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()应该为你做的伎俩。

猜你在找的Angularjs相关文章