我有角度:
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中这是不可能的?
答案 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); };
}]);