无法通过$ _GET,$ _POST&获取发布的数据Angularjs中的$ _REQUEST

时间:2014-04-18 15:02:03

标签: php angularjs

我是AngularJs的新手。我试图使用angularjs创建一个简单的应用程序。 在一个简单的应用程序中,我无法通过我的PHP脚本中的$ _POST,$ _GET或$ _REQUEST打印发布的数据。 使用file_get_contents(" php://输入")`我能够打印数据。

任何人都可以告诉我为什么$ _GET,$ _POST和$ _REQUEST无效?

我的Index.html代码:

<!DOCTYPE html>
<html ng-app>
<head>
<title>Search form with AngualrJS</title>
    <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" />
    <script src="http://code.angularjs.org/angular-1.0.0.min.js"></script>
    <script src="search.js"></script>
</head>

<body>

    <div ng-controller="SearchCtrl">
    <form class="well form-search">
        <label>Search:</label>
        <input type="text" ng-model="test" class="" placeholder="Keywords...">
        <button type="submit" class="btn" ng-click="search()">Search</button>
        <p class="help-block">Try for example: "php" or "angularjs" or "asdfg"</p>      
    </form>
<pre ng-model="result">
{{result}}
</pre>
   </div>
</body>

</html>

search.js代码:

function SearchCtrl($scope, $http) {
    $scope.url = 'search.php'; // The url of our search

    // The function that will be executed on button click (ng-click="search()")
    $scope.search = function() {

        // Create the http post request
        // the data holds the keywords
        // The request is a JSON request.
        $http.post($scope.url, { "data" : $scope.test}).
        success(function(data, status) {
            $scope.status = status;
            $scope.data = data;
            $scope.result = data; // Show result from server in our <pre></pre> element
        })
        .
        error(function(data, status) {
            $scope.data = data || "Request failed";
            $scope.status = status;         
        });
    };
}

Search.php代码:

<?php
// The request is a JSON request.
// We must read the input.
// $_POST or $_GET will not work!

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

$objData = json_decode($data);

// perform query or whatever you wish, sample:

/*
$query = 'SELECT * FROM
tbl_content
WHERE
title="'. $objData->data .'"';
*/

// Static array for this demo
$values = array('php', 'web', 'angularjs', 'js');

// Check if the keywords are in our array
if(in_array($objData->data, $values)) {
    echo 'I have found what you\'re looking for!';
}
else {
    echo 'Sorry, no match!';
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

要继续关于php.ini中设置错误的可能性的评论,this article(死链接)(通过this one链接,来自我的评论)也提供了这样的引用:

  

如果Content-Type为空或在HTTP消息中无法识别,则PHP $ _POST数组为空。不确定这是一个错误还是设计......

症状相同,(空$_POST但数据可通过php://input获得),这会导致出现此错误的可能原因有两个:

  1. php.ini post_max_size设置
  2. 中的语法错误
  3. 从前端发送的错误值或空的Content-Type标头
  4. 如果post_max_size的设置正确,则可能是angular正在移除帖子的Content-Type标头。根据{{​​3}}和this question,如果没有有效负载或空的有效负载与任何请求一起使用,angular将删除Content-Type标头,我认为这是您的问题。

    尝试在SearchCtrl

    中添加此内容
    function SearchCtrl($scope, $http) {
        $scope.url = 'search.php'; // The url of our search
        $scope.test = {test:'test'}; // Add me
        // ...
    

    我怀疑您的$_POST数组将被填充,因为现在将有一个Content-Type标头与请求一起发送,并且实际请求数据正在发送。如果可行,则表示您的test输入未正确绑定到作用域,或者您正在提交空数据。尝试在HTTP请求之前添加一个保护子句:

    if($scope.test) {
        $http.post($scope.url, { "data" : $scope.test})
        // ...