在angular中,我有:
var data = {};
data['name'] = "test";
data['class'] = "testClass";
$http.post('http://testURL',data,function(data){
console.log(data);
});
当我在PHP代码中这样做的时候:var_dump($_POST)
,我得到一个空的array.And,因此我必须使用file_get_contents("php://input");
(原始数据流)访问数据。
问:为什么我必须使用原始数据流?如果我在jQuery中使用普通的ajax调用发送数据,我可以获得$_POST格式的数据,但在angularjs中这是不可能的?
发布于 2014-03-23 08:36:00
当您发布json数据时,内容类型将由application/json决定。PHP中的$_POST数组仅在post数据是www-form-urlencoded时使用,而application/json不是。这就是为什么你需要从php://input中读取。
但是大多数流行的php框架在控制器上下文中使用一个更易读的API来处理这个问题:
<?php
class Controller {
function action($request) {
$data = $request->json();
}
}
发布于 2014-03-23 08:37:01
因为在默认情况下,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); };
}]);
https://stackoverflow.com/questions/22588513
复制