AngularJS HTTP post to PHP and undefined AngularJS is a popular JavaScript framework used for building web applications. One of its features is the ability to make HTTP requests to a server. In this case, we are specifically looking at how to make a POST

15 浏览
0 Comments

AngularJS HTTP post to PHP and undefined AngularJS is a popular JavaScript framework used for building web applications. One of its features is the ability to make HTTP requests to a server. In this case, we are specifically looking at how to make a POST

表单中有一个标签ng-submit=\"login()。\n该函数在JavaScript中被正常调用。\n

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');
        });
    }
}

\n我从PHP文件中得到了一个200 OK的响应,但返回的数据说emailpassword未定义。这是我所有的PHP代码\n


\n为什么我得到了未定义的POST值?\n编辑\n我想指出,由于这个问题似乎很受欢迎(尽管它已经过时),.success.error已经被弃用,你应该使用.then,正如@James Gentes在评论中指出的那样。

0
0 Comments

问题的原因是在API的基础控制器中,使用了如上述的代码来将post数据以json格式解析到$_POST数组中。这样做的目的是为了让API能够更友好地处理来自不同库(如jQuery)的post请求,无论其默认的Content-Type是application/x-www-form-urlencoded还是application/json。

解决方法是在AngularJS中发送post请求时,需要在请求头中明确设置Content-Type为application/json,以确保API能够正确解析post数据。

以下是解决方法的具体代码示例:

$http({
    method: 'POST',
    url: 'your-api-url',
    headers: {'Content-Type': 'application/json'},
    data: JSON.stringify(yourData)
}).then(function(response) {
    // 请求成功的处理逻辑
}, function(error) {
    // 请求失败的处理逻辑
});

通过在请求头中设置Content-Type为application/json,并使用JSON.stringify方法将post数据转为json字符串,可以确保API能够正确解析post数据,并且能够正常处理请求。

希望这能对你有所帮助。

0
0 Comments

AngularJS HTTP post到PHP的问题出现的原因是,PHP默认情况下无法直接从请求中获取JSON数据。通常,PHP会将POST请求的数据解析为关联数组并存储在$_POST超全局变量中。但是,当使用AngularJS的$http服务发送POST请求时,数据被以JSON格式发送,而不是以url-encoded的形式发送。因此,$_POST变量为空,导致数据无法正确解析。

为了解决这个问题,可以在服务器端的初始化文件中添加以下代码段:

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

这段代码的作用是将从请求中获取的JSON数据解析为关联数组,并存储在$_POST变量中。为了避免$_POST变量为空的情况,还可以将结果强制转换为数组:

$_POST = (array) json_decode(file_get_contents('php://input'), true);

关于为什么PHP没有默认实现这个功能,以及为什么期望PHP做出预期行为是错误的,这些问题没有得到明确的解释。然而,这种解决方法可能是一种比较脆弱的方法,因为只适用于POST数据表示关联数组的情况。如果POST数据表示的是数值索引数组,那么$_POST变量将得到一个数值索引的数组,这在其他依赖于一致的$_POST超全局变量行为的系统部分中可能会导致意外行为。

需要注意的是,这种解决方法仅适用于使用AngularJS发送POST请求的应用程序,并且必须对POST数据进行严格的验证,以避免安全问题。

0
0 Comments

AngularJS HTTP post to PHP and undefined问题的出现原因是,AngularJS的.post()方法默认将Content-type头设置为application/json。但是,你覆盖了这个设置,将其改为传递表单编码的数据。然而,你没有改变data的值以传递适当的查询字符串,所以PHP无法像你期望的那样填充$_POST

解决这个问题的方法有两种:

1. 使用默认的AngularJS设置,将头部的Content-type设置为application/json,然后在PHP中读取原始输入,并对JSON进行反序列化。在PHP中可以这样实现:

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

2. 如果你非常依赖于$_POST功能,你可以构建一个查询字符串(如email=someemail.com&password=somepassword)并将其作为数据发送。确保这个查询字符串进行了URL编码。如果是手动构建的(而不是使用像jQuery.serialize()这样的方法),可以使用JavaScript的encodeURIComponent()方法来进行URL编码。

这个问题的解决方法取决于你的需求和应用架构。如果你与一个消费/传递JSON的REST服务进行交互,那么最好使用JSON的Content-type。如果你主要使用的是可以产生HTML或HTML片段的端点,或者使用基本的表单提交作为AJAX的后备,那么最好使用表单编码。

0