我正在使用角度js和php。我有一个数组要从我的控制器发布js文件。我已将我的数组转换为JSON并尝试传递如下数据
var update = {
method: 'POST',
url: apiPoint.url + 'up.php',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
params :{
alldatas: JSON.stringify($scope.alldata) ,
section : 'A',
}
通过这样做,我得到414状态错误代码。网址太长了。 所以我试过JSONC打包我的数据.. 我使用jsonc.min.js并更新了我的代码,如下所示。
var update = {
method: 'POST',
url: apiPoint.url + 'up.php',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
params :{
alldatas: JSONC.pack($scope.alldata) ,
section :'A',
}
现在我的数据正在通过url传递,在我的控制器中我获取了数据。但我无法解压缩数据。请帮我打开数据包。
答案 0 :(得分:0)
我认为您使用的是标准$http
组件,并且提到的JavaScript对象代表其configuration object。
您应该通过POST传递JSON数据,即请求正文,因为请求URI length is limited。 params
选项序列化为GET。
因此,您需要将数据(alldatas
)移至data
选项:
var req = {
method: 'POST',
url: apiPoint.url + 'up.php',
data: { alldatas: $scope.alldata },
// you might even stringify it
//data: JSON.stringify({ alldatas: $scope.alldata }),
headers: { 'Content-Type': 'application/json;charset=utf-8' },
params: { section : 'A' }
};
$http(req).then(function (response) {
console.log(response.data);
});
对于application/x-www-form-urlencoded
内容类型,您应该构建一个查询字符串:
var req = {
method: 'POST',
url: apiPoint.url + 'up.php',
data: 'alldatas=' + encodeURIComponent(JSON.stringify($scope.alldata)),
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
params: { section : 'A' }
};
$_POST
超全球仅针对application/x-www-form-urlencoded
和multipart/form-data
内容类型填充。其他内容类型可通过php://input
流:
if (!empty($_POST)) {
$obj = $_POST;
} else {
$json = file_get_contents('php://input');
$obj = json_decode($json);
}
if ($obj) {
header('Content-Type: application/json');
echo json_encode($obj);
}
exit();