【问题标题】:PHP - get params from AngularJS $http.get requestPHP - 从 AngularJS $http.get 请求中获取参数
【发布时间】:2016-04-16 10:32:39
【问题描述】:

如何使用 PHP 检索通过 $http.get 请求传递的参数?

这是我的控制器:

app.controller('phonesCtrl', function ($scope, $http, $routeParams) {

    $scope.make = $routeParams.make;
    console.log($routeParams); // Console displays 'Object {make: "apple"}'
    console.log($scope.make); // Console displays 'apple'

    $http({
        method: 'POST',
        url: 'tools/get.php',
        params: $routeParams, // Already an object: "{"make" : apple}"
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
    })
    .then(function (response) {
        $scope.phones = response.data;
    });
});

我的 PHP 尝试: 适用于 $http.post,但有些事情告诉我,我不能使用 file_get_contents 函数来做同样的事情。

<?php

$data = json_decode(file_get_contents("php://input"));

var_dump($data); // Outputs NULL
var_dump($_POST["make"]); // Outputs NULL
var_dump($_POST); // Outputs empty array

$con = new PDO('mysql:host=localhost;dbname=mydb', 'root', 'root');

$stmt = $con->prepare("SELECT * FROM phones WHERE make = ?");
$stmt->bindParam(1, $make);
$stmt->execute();

$result = json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));

print_r($result);

?>

我还使用$routeProvider 服务来保持我的链接干净。起初我意识到控制台输出的是空白对象,所以我将配置更改为:

.when('/get/:make', { // Added /:make
    templateUrl: 'tools/get.php',
    controller: 'phonesCtrl'
})

所以现在当我导航到 /get/apple 时,我的控制台会输出“apple”。

【问题讨论】:

  • 您可以尝试将 javascript 对象而不是字符串作为 $http 的参数: var make = {make: $routeParams.phone};
  • 永远不要尝试手动制作 json ......这很容易出错,让$http 为你做更简单
  • 你为什么要问file_get_contents?我猜 PHP 告诉过你,它需要 string(文件名)作为第一个参数,而你传递的是 array($_GET)。这没有任何意义。 BTW 顾名思义,函数file_get_contents 将第一个参数中的文件名指定的文件内容返回为string。但是你只是发送一个 GET 参数,根本没有文件,你为什么要使用那个函数?您已经在 $_GET 数组中以字符串形式获取 GET 参数。
  • @DawidFerenczy 我现在只是在玩。起初我有file_get_contents("php://input"),因为这就是我为我的post 请求所做的事情并且它有效。我不确定此时我在做什么。
  • @PatrickKelleter 感谢您指出这一点,我认为这比原来要困难得多。

标签: php angularjs xmlhttprequest


【解决方案1】:

如果你阅读 PHP $_POST 文档here 你可以找到

当使用 application/x-www-form-urlencoded [您正在使用的] 或 multipart/form-data 作为请求中的 HTTP Content-Type。

您尝试做的是使用 POST 参数传递 GET 请求。你像这样www.yoursite.it/page.php?name=Matteo 传递它,然后你用$name = $_GET['name'] 获取变量,或者你以你的方式传递,但在POST 中传递,就像这样:

$http({
method: 'POST', //CHANGE THIS FROM GET TO POST
url: 'tools/get.php',
params: {
    name: 'Matteo' //USE PROPER JAVASRIPT OBJECTS
},
headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
}
})

然后你得到$name = $_POST['name']的变量

【讨论】:

  • 我已更新问题以包含 $routeProvider.config 并更正了 URL 以包含 /:param。在添加之前我得到了一个空对象。我还尝试将参数作为帖子传递并使用$_POST 检索它们,我还尝试通过url tools/get.php?make=apple 传递参数并尝试使用$_GET 检索它们,但我仍然输出@987654332 @ 或 empty array。我可能会错过什么?
  • 您能否在开发控制台中看到参数是否以这种方式传递:表单数据面板中的 make=Apple ?或许贴个截图
【解决方案2】:

在 PHP 中使用

$_GET["make"]

获取参数。

【讨论】:

    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多