【问题标题】:JSON file displaying with PHP and AngularJS使用 PHP 和 AngularJS 显示的 JSON 文件
【发布时间】:2016-05-18 12:08:54
【问题描述】:

我一直试图从 Phpmyadmin 的数据库中显示一个 json 文件,但徒劳无功。谁能告诉我我做错了什么?

这是我的代码:

json.php

    <?php
    header("Access-Control-Allow-Origin: *");
    $con = mysqli_connect("localhost","root","","test");
    // Check connection
    if (mysqli_connect_errno())
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $data=array();
    $q=mysqli_query($con, "select * from mesures");
    while ($row=mysqli_fetch_object($q)){
     $data[]=$row;
    }
    echo json_encode($data);
    mysqli_close($con);
?>

index.html

<div ng-controller="measureController as measureCtrl" style="margin-top:170px; border:0">
    <h1>ok</h1>
    <div ng-repeat="record in measureCtrl.records" class="row">
        {{record.test}}
    </div>
</div>

mesure-controller.js

angular.module('mesure', [])

.controller('measureController', ['$scope', 'recordService',
        function($scope, recordService) {

        this.records = new Object();


        function getData(){
            $(document).ready(function() {
            recordService.getAll(function(callback){
                if (callback != null){
                    //location.reload();
                    //console.log(callback);
                    this.records = callback;
                    return callback;
                }
            });

        })
        }
        this.records = getData();

        //console.log(this.records);
}]);

recordService.js

angular.module('recordService', []).factory('recordService', ["$timeout", function ($timeout) {

    var RecordService = {};

    var recordList = new Array();

    return {
        getAll : function (callback) {
            $(document).ready(function()
             {
                 var url="http://localhost/Effienergy/Effi-Prove/www/database/json.php";
                 $.getJSON(url,function(result){
                     //console.log(result);
                     $.each(result, function(i, field){
                         var record =
                         {
                            "test" : field.test,
                            "test2" : field.test2,
                         };
                         recordList.push(record);
                         //console.log(record)
                     });
                 }).done(function(){callback(recordList)});
             });
        },

        get : function (id) {
            for (record in this.recordList) {
                if ((this.recordList[record]).id == id) {
                    return (this.recordList[record]);
                }
            }
            return null;
        },

        add : function (record) {
            this.recordList.push(record);
        }



//        //5 secondes après le chargement de la page, la valeur d'une propriété change dans le service.
//        //La view est mise à jour automatiquement
//        $timeout(function() {
//            userData.userName = "NATNAT";
//        }, 5000);


    };

}]);

当我在开发人员控制台中检查 Json 时,它似乎是有效的,所以我认为它与我正在尝试做的范围有关..

这是我的 json:here

提前致谢

【问题讨论】:

  • 您遇到的错误是什么?
  • 尝试添加这些行: header('Content-type: text/json'); header('Content-type: application/json');
  • @Ramkee 事情是我在控制台中没有收到任何特定错误。我的
    只是空的。我尝试了标题,不幸的是没有修复

标签: php angularjs json


【解决方案1】:

我看到我的评论没有再次发布。让我尝试第三次。 $.getJson 不是 Angular 并且更改对 Angular 不可见。请替换为 $http({url:url}).then(functiom(rs){console.log(rs)},functiom(err){ console.log(err)}) 消失的数组可能正在缓存。在 chrome 开发工具中,请禁用网络选项卡下的缓存

编辑: 好的,看看你的 pastebin,$http 没有返回结果:

您的服务应如下所示:

angular.module('recordService', []).factory('recordService', ['$http', function($http) {
    var recordService = [];
    recordService.getAll = function (callback) {
        var url = "http://localhost/Effienergy/Effi-Prove/www/database/json.php";
        $http({url: url}).then(function (rs) {
            callback(rs.data);
            console.log(rs)

        }, function (err) {

            console.log(err)
        })

    }
    return recordService;
}]);

然后在你的控制器中保持简单:

angular.module('mesure', [])

.controller('measureController', function($scope, recordService) {

        $scope.records = [];       
        recordService.getAll(function(rs) {
            $scope.records = rs;
            console.log(rs);
        });
}]);

您的索引看起来不错

<div ng-controller="measureController as measureCtrl" style="margin-top:170px; border:0">
    <h1>ok</h1>
    <div ng-repeat="record in measureCtrl.records" class="row">
        {{record.test}} - {{record.test2}}
    </div>
</div>

【讨论】:

  • 没问题,谢谢您的回答。我觉得我很接近了,感谢 console.log(rs),我可以看到这个对象。但我现在不太确定如何将它推入我的数组:/ 这是我目前的代码:pastebin.com/kSeRvqGy
  • 这取决于 JSON 的格式。可以发一下吗
  • 这是我的 JSON 在网络选项卡中的显示方式:imgur.com/55mLf3b。不知道这是不是你想看到的,你也可以在我的原始帖子中查看我的 json.php 文件
  • 哦,好的,我看到了,但那是测试数据。在我们继续之前,您想对数据做什么?
  • 我想通过范围({{record.test}})在我的索引页面上显示我的数据值,也许稍后在表格中排序它们,但首先我会很好如果我真的能看到他们。
【解决方案2】:

请尝试更改此行

$data [] = $row;

array_push ($data,$row);

【讨论】:

  • 您好,很遗憾没有解决。感谢您尝试提供帮助。另一个奇怪的事情是,当我检查元素时,看起来我无法访问 ng -repeat 。我只看到“ 。我不知道这是否正常
  • 请我忘了提。 document.ready 块不属于 Amgular。请全部删除。 this.records 也需要是控制器中的 $scope.records
  • 嘿,谢谢你的回答。我按照你说的做了,但也没有解决问题。
  • 难以置信,我通过垃圾邮件刷新看到了我的阵列。然后我再次刷新它就消失了……我不明白
  • 如果有机会请使用 $http 并告诉我们结果,您还需要将其注入到 recordService 中
猜你喜欢
  • 1970-01-01
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
相关资源
最近更新 更多