AngularJS JSON not arriving php

AngularJS JSON not arriving php

本文关键字:php arriving not JSON AngularJS      更新时间:2023-09-26

我遇到了以下问题,我有一个发出 http 请求的服务,当我尝试获取响应时会抛出解析器错误,这是因为响应在尝试解析响应时尚未准备好。

这是代码

simpafAPIservice.getSimulacao($stateParams.id).success(function(response){
         console.log(JSON.stringify(response[0].info));
         $scope.simuladorInfo.cliente = response[0].cliente;
         $scope.simuladorInfo.info = JSON.parse(response[0].info);
         console.log(JSON.stringify(response[0].info));
         setTimeout(function(){
             for(var i=0;i<$scope.simuladorInfo.info.simuladores.length;i++){
                 $scope.addDataGraphic(i);
             }
         },100);
     });
}

当我控制台时.log响应会打印一个空字符串,这很奇怪,这就是它抛出此解析器错误的原因。

我的问题是,如何仅在响应准备就绪时才执行 .success 功能?

编辑:

最后问题是其他的,我将 JSON 存储在数据库中,但是当 JSON 具有非常信息时,它不会到达 php。

这是我的PHP代码:

    <?php
$id = $_POST["id"];
$id_col = $_POST["id_col"];
$tipo = $_POST["tipo"];
$cliente = $_POST["cliente"];
$info = $_POST["info"];
date_default_timezone_set("Europe/Lisbon");
$data = date("Y-m-d H:i:s");
require 'connection.php';
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
if($id!=""){
    $sql = "UPDATE `Simulacoes` SET `info`='".$info."' WHERE `id`='".$id."'";
}else{
    $sql = "INSERT INTO `Simulacoes`(`id_col`, `tipo`, `data`, `cliente`, `info`) VALUES ('".$id_col."','".$tipo."','".$data."', '".$cliente."', '".$info."')";
}
if ($conn->query($sql) === TRUE) {
    echo $info;
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
mysqli_close($conn);
?>

这是我得到的回应:

{"data":"","status":200,"config":{"method":"POST","transformRequest":[null],"transformResponse":[null],"params":{"id_col":"1","tipo":"Património Reforma","info":{"simuladores":[{"nome":"ii","info":{"prazoReforma":20,"empreendimentos":{"empreendimentos":[{"id":"1","nome":"Oporto Place","localizacao":"Porto","$$hashKey":"object:50"}],"tipologias":{"0":"Loft","19":"T2","37":"T3"},"plantas":{"0":"3.1","1":"6","2":"8","5":"3.2","12":"2.1","13":"7","14":"2.2","15":"5"},"pisos":[{"id":"2","piso":"1","$$hashKey":"object:69"}]},"entrada":"20000","duracao":"35","taxa":"5","montante":82000,"prestacao":"414","prestacao_seguros":"440","renda_liquida":"320","resultado":-120,"patrimonio":134367},"$$hashKey":"object:38","imovel":{"empreendimento":{"id":"1"},"tipologia":"Loft","planta":"3.1","piso":"2","info":{"condominio":"50","renda":"400  ","preco":"102000  ","id":"1"}},"hide":1}],"montanteTotal":134367,"pensao":"569","idadeActual":"45","idadeReforma":"65","pmII":120,"pmTotal":120}},"url":"php/guarda-simulacoes.php","headers":{"Accept":"application/json, text/plain, */*"}},"statusText":"OK"}

如您所见,当我回显$info时,它什么也不返回,一个空字符串,但在 data.config.params 中,我得到了所有参数。有人知道为什么会这样吗?

你的代码看起来不错,这是从 并在其成功中执行代码。我认为您应该使用超时完成后$digest循环运行的$timeout而不是setTimeout

法典

simpafAPIservice.getSimulacao($stateParams.id).success(function(response){
         console.log(JSON.stringify(response[0].info));
         $scope.simuladorInfo.cliente = response[0].cliente;
         $scope.simuladorInfo.info = JSON.parse(response[0].info);
         console.log(JSON.stringify(response[0].info));
         $timeout(function(){
             for(var i=0;i<$scope.simuladorInfo.info.simuladores.length;i++){
                 $scope.addDataGraphic(i);
             }
         },100);
     });
}

根据文档,$http.success 在第一个参数中返回数据,仅当活动转换响应可以检测到是适当的格式时,才会将其转换为 JSON:

Angular 提供以下默认转换:

响应转换 ($httpProvider.defaults.transformResponse 和 $http.defaults.transformResponse(:

如果检测到 XSRF 前缀,请将其剥离(请参阅安全注意事项 部分(。如果检测到 JSON 响应,请使用 JSON 解析器。

如果您的服务器使用空字符串进行响应(这里似乎就是这种情况(然后它不会被检测为 JSON 对象,并且将保持为空字符串。

检查您的服务器响应,它可能没有正文和错误状态。如果要从不同的域(即使最终是同一服务器(请求数据,则需要注意的一件事是同源策略。