AngularJS HTTP POST到PHP和未定义

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响应,但是返回的数据表明emailpassword都是未知的。这就是我所有的php

<?php
$email = $_POST['email'];$pass  = $_POST['password'];echo $email;?>

你知道我为什么不知道POST价值?

编辑

我想指出的是,这似乎是一个很流行的问题(但它已经很老了),.success.error已被否决,您应该使用.then@James Gentes在评论中指出


慕雪6442864
浏览 644回答 3
3回答

杨魅力

安古拉杰.post()默认内容类型标头为application/json..您正在将此重写为传递窗体编码的数据,但不更改data值以传递适当的查询字符串,因此PHP不填充$_POST如你所料。我的建议是只使用默认的angularjs设置application/json作为头文件,读取PHP中的原始输入,然后反序列化JSON。这可以在PHP中实现,如下所示:$postdata&nbsp;=&nbsp;file_get_contents("php://input");$request&nbsp;=&nbsp;json_decode($postdata);$email&nbsp;=&nbsp;$request->email;$pass&nbsp;=&nbsp;$request->password;或者,如果你严重依赖$_POST功能,您可以形成如下所示的查询字符串email=someemail@email.com&password=somepassword并以数据的形式发送。确保此查询字符串是URL编码的。如果手动构建(而不是使用类似的jQuery.serialize()),Javascript的encodeURIComponent()应该为你做点什么。

智慧大石

在我的init文件开始时,我在服务器端这样做,工作起来很有魅力,您不需要在有角的或现有的php代码中做任何事情:if&nbsp;($_SERVER['REQUEST_METHOD']&nbsp;==&nbsp;'POST'&nbsp;&&&nbsp;empty($_POST)) &nbsp;&nbsp;&nbsp;&nbsp;$_POST&nbsp;=&nbsp;json_decode(file_get_contents('php://input'),&nbsp;true);

沧海一幻觉

在我正在开发的API中,我有一个基本控制器,在它的_struction()方法中,我有以下内容:if(isset($_SERVER["CONTENT_TYPE"])&nbsp;&&&nbsp;strpos($_SERVER["CONTENT_TYPE"],&nbsp;"application/json")&nbsp;!==&nbsp;false)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$_POST&nbsp;=&nbsp;array_merge($_POST,&nbsp;(array)&nbsp;json_decode(trim(file_get_contents('php://input')),&nbsp;true));}这允许我在需要时将json数据简单地引用为$_post[“var”]。效果很好。这样,如果经过身份验证的用户与这样一个库连接,jQuery将发送带有默认内容类型的POST数据-Type:application/x-www-form-urlencode或content-Type:application/json,则API将响应而不出错,并使API更加友好。希望这能帮上忙。
打开App,查看更多内容
随时随地看视频慕课网APP