为了账号安全,请及时绑定邮箱和手机立即绑定

AngularJS HTTP POST到PHP和未定义

AngularJS HTTP POST到PHP和未定义

慕雪6442864 2019-06-19 16:16:31
AngularJS 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, status, headers, config)         {             console.log('error');         });     }}我从PHP文件中得到了一个200 OK响应,但是返回的数据表明email和password都是未知的。这就是我所有的php<?php $email = $_POST['email'];$pass  = $_POST['password'];echo $email;?>你知道我为什么不知道POST价值?编辑我想指出的是,这似乎是一个很流行的问题(但它已经很老了),.success和.error已被否决,您应该使用.then@James Gentes在评论中指出
查看完整描述

3 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

安古拉杰.post()默认内容类型标头为application/json..您正在将此重写为传递窗体编码的数据,但不更改data值以传递适当的查询字符串,因此PHP不填充$_POST如你所料。

我的建议是只使用默认的angularjs设置application/json作为头文件,读取PHP中的原始输入,然后反序列化JSON。

这可以在PHP中实现,如下所示:

$postdata = file_get_contents("php://input");$request = json_decode($postdata);$email = $request->email;$pass = $request->password;

或者,如果你严重依赖$_POST功能,您可以形成如下所示的查询字符串email=someemail@email.com&password=somepassword并以数据的形式发送。确保此查询字符串是URL编码的。如果手动构建(而不是使用类似的jQuery.serialize()),Javascript的encodeURIComponent()应该为你做点什么。


查看完整回答
反对 回复 2019-06-19
?
智慧大石

TA贡献1946条经验 获得超3个赞

在我的init文件开始时,我在服务器端这样做,工作起来很有魅力,您不需要在有角的或现有的php代码中做任何事情:

if ($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST))
    $_POST = json_decode(file_get_contents('php://input'), true);


查看完整回答
反对 回复 2019-06-19
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

在我正在开发的API中,我有一个基本控制器,在它的_struction()方法中,我有以下内容:

if(isset($_SERVER["CONTENT_TYPE"]) && strpos($_SERVER["CONTENT_TYPE"], "application/json") !== false) {
    $_POST = array_merge($_POST, (array) json_decode(trim(file_get_contents('php://input')), true));}

这允许我在需要时将json数据简单地引用为$_post[“var”]。效果很好。

这样,如果经过身份验证的用户与这样一个库连接,jQuery将发送带有默认内容类型的POST数据-Type:application/x-www-form-urlencode或content-Type:application/json,则API将响应而不出错,并使API更加友好。

希望这能帮上忙。


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 646 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信