使用angularjs发送时无法读取$ _POST中的json数据

时间:2014-03-23 08:17:27

标签: php jquery ajax json angularjs

我有角度:

var data = {};
data['name'] = "test";
data['class'] = "testClass";

$http.post('http://testURL',data,function(data){
console.log(data);
});

当我在PHP代码中执行:var_dump($_POST)时,我得到一个空数组。因此我必须使用file_get_contents("php://input");(原始数据流)访问数据。

问题:为什么我必须使用原始数据流?如果我使用jQuery中的普通ajax调用发送数据,我可以在$ _POST中获取数据但是在angularjs中这是不可能的?

2 个答案:

答案 0 :(得分:0)

当您发布json数据时,内容类型将由application / json发布。 PHP中的$ _POST数组仅在post-data为www-form-urlencoded时使用,而application / json不是。这就是你需要阅读php:// input。

的原因

但是大多数流行的php框架在控制器上下文中使用更易读的API来处理这个问题:

<?php
class Controller {
    function action($request) {
        $data = $request->json();
    }
}

答案 1 :(得分:0)

因为AngularJS默认将数据发送为application/json,所以没有任何问题。 jQuery在发送数据时将其转换为x-www-form-urlencoded

如果您想以jQuery方式获取它,您可能需要在http提供商处添加一些配置。

我的应用程序仍有jQuery贡献,这是我的http配置:

angular.module('app')
.config(['$httpProvider', function($httpProvider){
    $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
    $httpProvider.defaults.transformRequest = function(data){ if (data) return jQuery.param(data); };

}]);