gpt4 book ai didi

php - AngularJS HTTP 发布到 PHP 和未定义

转载 作者:IT老高 更新时间:2023-10-28 11:49:27 24 4
gpt4 key购买 nike

我有一个带有 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 在评论中指出的那样

最佳答案

angularjs .post() 默认 Content-type header 为 application/json。您将覆盖它以传递表单编码的数据,但是您没有更改 data 值以传递适当的查询字符串,因此 PHP 不会像您期望的那样填充 $_POST .

我的建议是只使用 application/json 的默认 angularjs 设置作为 header ,读取 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() 应该可以为您解决问题。

关于php - AngularJS HTTP 发布到 PHP 和未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15485354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com