$http和PHP

$http和PHP,php,angularjs,Php,Angularjs,我无法使以下代码正常工作 <input type="text" ng-model="name" > <button ng-click="send(name);">SEND</button> angular.module('myapp', []). controller('MyController', ['$scope','$http', function ($scope,$http) { $scope.name='Jim'; $scope

我无法使以下代码正常工作

<input type="text" ng-model="name" >
<button ng-click="send(name);">SEND</button>

 angular.module('myapp', []).
 controller('MyController', ['$scope','$http', function ($scope,$http) {
    $scope.name='Jim';
    $scope.send=function() {
        return $http({
            method: 'POST',
            data:{server:'Hi'},
            url: 'test.php',
            dataType: 'json'
         }).then(function(data){console.log(data)},function(data){console.log('failure')});
}; 
 }]);
通过按下SEND按钮,我成功地获得$http返回:Object{data:Jim,status:200,config:Object,statusText:OK}。为什么数据等于该对象,为什么不将“Hi”传递给PHP?
请找个人帮忙。我要发疯了

可能是因为在PHP脚本中,您以错误的方式读取了请求主体,请尝试:

<?php
header("Content-Type: application/json");
$entityBody = file_get_contents('php://input');
$request = json_decode($entityBody);
$request->server .= ' Jim';
echo json_encode($request);
?>

可能是因为在PHP脚本中,您以错误的方式读取了请求主体,请尝试:

<?php
header("Content-Type: application/json");
$entityBody = file_get_contents('php://input');
$request = json_decode($entityBody);
$request->server .= ' Jim';
echo json_encode($request);
?>

我几天前才遇到这个问题。Angular$http不像php所期望的那样为POST序列化数据,我也不认为内容类型设置正确。如果希望php按照预期获得请求变量$POST,而不必从php://input,您需要序列化post数据并确保内容类型正确。这就是我的工作

    $http({
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
        },
    data: formatPostData( {server:'Hi'} ),
    url: 'test.php',
    dataType: 'json'
})
用于序列化post数据的函数如下所示

function formatPostData( args ) {
    var postString = '';
    angular.forEach( args, function(v, k){
        postString += k + '='+encodeURIComponent(v)+'&';
    })
    return postString.slice(0, -1);
}

我几天前才遇到这个问题。Angular$http不像php所期望的那样为POST序列化数据,我也不认为内容类型设置正确。如果希望php按照预期获得请求变量$POST,而不必从php://input,您需要序列化post数据并确保内容类型正确。这就是我的工作

    $http({
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
        },
    data: formatPostData( {server:'Hi'} ),
    url: 'test.php',
    dataType: 'json'
})
用于序列化post数据的函数如下所示

function formatPostData( args ) {
    var postString = '';
    angular.forEach( args, function(v, k){
        postString += k + '='+encodeURIComponent(v)+'&';
    })
    return postString.slice(0, -1);
}