用PHP解包数据

时间:2016-10-20 08:22:13

标签: javascript php angularjs

我正在使用角度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传递,在我的控制器中我获取了数据。但我无法解压缩数据。请帮我打开数据包。

1 个答案:

答案 0 :(得分:0)

我认为您使用的是标准$http组件,并且提到的JavaScript对象代表其configuration object

您应该通过POST传递JSON数据,即请求正文,因为请求URI length is limitedparams选项序列化为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-urlencodedmultipart/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();