版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014273681/article/details/78732380
1、问题描述
用angularJS中的$http服务碰到了一个问题:运用$http.post方法向后台传递数据时,后台的php页面获取不到data参数传过来的值。 不论是这种姿势:
$http.post( "1.php", { id: 1 }).success(function (data) {
console.log(data);
});
还是这种姿势:
$http({
method: 'POST',
url: '1.php',
data: { id: 1 }
}).success(function (data) {
console.log(data);
});
后台php中的$_POST或$_REQUEST都无法获取到data中的值:
<?php
echo json_encode($_POST);
?>
输出为一个空数组。为了测试php本身是不是真的获取不到值,我就写了个表单测试下:
<form action="1.php" method="post">
<input type="text" name="tid">
<input type="submit" value="submit">
</form>
输出结果为:{"tid":"2"},也就是说表单里的值是可以获取的,但是用ajax发送的数据获取不了!
那么表单数据和ajax发送的post数据之间有什么差异呢?于是我悄悄瞄一眼请求头...
I、.简单粗暴的直接改成$.post()方法,这样后台不用作任何修改,但是网上一些比较有经验的网友称这样可能违背使用angular的初衷。
II、引用JQuery,使用JQuery的$.param()方法序列化参数后传递
$http({
method : 'POST',
url: 'process.php',
data: $.param($scope.formData), //序列化参数
headers: { 'Content-Type': 'application/x-www-form-urlencoded' } )
})
III、
使用file_get_contents("php://input")获取再处理
$input = file_get_contents("php://input",true);
echo $input;
VI、
修改Angular的$httpProvider的默认处理(参考:http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax