加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular HTTP post到PHP和未定义

发布时间:2020-12-17 09:09:59 所属栏目:安全 来源:网络整理
导读:我有一个带有标记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
我有一个带有标记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.comu0026amp; password = somepassword,并将其作为数据发送。确保此查询字符串是URL编码的。如果手动构建(相对于使用像jQuery.serialize()),Javascript的encodeURIComponent()应该为你做的伎俩。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读