我是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!';
}
任何帮助将不胜感激。
答案 0 :(得分:0)
要继续关于php.ini中设置错误的可能性的评论,this article(死链接)(通过this one链接,来自我的评论)也提供了这样的引用:
如果Content-Type为空或在HTTP消息中无法识别,则PHP $ _POST数组为空。不确定这是一个错误还是设计......
症状相同,(空$_POST
但数据可通过php://input
获得),这会导致出现此错误的可能原因有两个:
post_max_size
设置如果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})
// ...