简体   繁体   English

无法使用 PHP 和 Angular JS 获取 JSON 数据

[英]Unable to fetch JSON Data using PHP & Angular JS

I'm passing ID to fetch JSON encode data using Angular JS.我正在传递 ID 以使用 Angular JS 获取 JSON 编码数据。

Here is my controller:这是我的控制器:

    dhmsApp.controller('dhmsDetailsView',function($scope,$http, $routeParams){
     $http.get("include/detailViewBg.php", {params: {id: $routeParams.id}})
        .success(function (response) {$scope.details = response});
});

Here is my PHP SELECT Query code (detailViewBg.php) from which JSON is getting Encoded这是我的 PHP SELECT 查询代码 (detailViewBg.php),从中对 JSON 进行编码

    <?php
include("../include/connection_string.php");

$id = $_GET['id'];

$sql = mysqli_query($db, "SELECT * FROM dhms_requirement where id='".$id."'");
if(mysqli_num_rows($sql)){ 
    $data = array();
    while($row = mysqli_fetch_array($sql)){
        $data[] = array(
                'id' => $row['id'],
            'rClientName' => $row['rClientName'],
            'rContactNumber' => $row['rContactNumber'],
            'rCompanyName' => $row['rCompanyName'],
            'rEmail' => $row['rEmail'],
            'rRequirement' => $row['rRequirement'],
        );
    }
    header('Content-type: application/json');
    echo json_encode($data);
}

$sqlDomain = mysqli_query($db, "SELECT * FROM dhms_domain_details where id='".$id."'");
if(mysqli_num_rows($sqlDomain)){
    $dataDomain = array();
    while($rowDomain = mysqli_fetch_array($sqlDomain)){
        $dataDomain[] = array(
                'id' => $rowDomain['id'],
            'dSelectDomain' => $rowDomain['dSelectDomain'],
            'dDomainName' => $rowDomain['dDomainName'],
            'dRegisterDomainFrom' => $rowDomain['dRegisterDomainFrom'],
            'dStartDate' => $rowDomain['dStartDate'],
            'dEndDate' => $rowDomain['dEndDate'],
            'dRegistrationFor' => $rowDomain['dRegistrationFor'],
        );
    }
    header('Content-type: application/json');
    echo json_encode($dataDomain);
}



?>

Here is my HTML page where I'm fetching my data这是我获取数据的 HTML 页面

 <div class="panel-body" ng-repeat="u in details track by $index">
                    <div class="col-lg-6">
                        <ul class="list-group">
                            <li class="list-group-item"><strong>Req. NO.</strong> : {{u.id}}</li>
                            <li class="list-group-item"><strong>Contact Number</strong> : {{u.rContactNumber}}</li>
                            <li class="list-group-item"><strong>Email Address</strong> : {{u.rEmail}}</li>
                        </ul>
                    </div>
                    <div class="col-lg-6">
                        <ul class="list-group">
                            <li class="list-group-item"><strong>Client Name</strong> : {{u.rClientName}}</li>
                            <li class="list-group-item"><strong>Compnay Name</strong> : {{u.rCompanyName}}</li>
                            <li class="list-group-item"><strong>Requirement</strong> : {{u.rRequirement}}</li>

                        </ul>
                    </div>
                </div>
<div class="panel-body" ng-repeat="u in details track by $index">
            <div class="col-lg-6">
                <ul class="list-group">
                    <li class="list-group-item"><strong>Req. NO.</strong> : {{u.dSelectDomain}}</li>
                    <li class="list-group-item"><strong>dDomainName</strong> : {{u.dDomainName}}</li>
                    <li class="list-group-item"><strong>dRegisterDomainFrom</strong> : {{u.dRegisterDomainFrom}}</li>
                </ul>
            </div>
            <div class="col-lg-6">
                <ul class="list-group">
                    <li class="list-group-item"><strong>dStartDate</strong> : {{u.dStartDate}}</li>
                    <li class="list-group-item"><strong>dEndDate</strong> : {{u.dEndDate}}</li>
                    <li class="list-group-item"><strong>dRegistrationFor</strong> : {{u.dRegistrationFor}}</li>

                </ul>
            </div>
        </div>

It's showing an error in the console.它在控制台中显示错误。 Please see in the below image请看下图Chrome 开发者工具视图。 Javascript 错误消息显示“SyntaxError: Unexpected token [in JSON at position 182

You did echo json data twice, so your response data is invalid json.您确实回显了 json 数据两次,因此您的响应数据是无效的 json。

<?php
include("../include/connection_string.php");

$id = $_GET['id'];

$result = [];

$sql = mysqli_query($db, "SELECT * FROM dhms_requirement where id='".$id."'");
if(mysqli_num_rows($sql)){ 
    $data = array();
    while($row = mysqli_fetch_array($sql)){
        $data[] = array(
                'id' => $row['id'],
            'rClientName' => $row['rClientName'],
            'rContactNumber' => $row['rContactNumber'],
            'rCompanyName' => $row['rCompanyName'],
            'rEmail' => $row['rEmail'],
            'rRequirement' => $row['rRequirement'],
        );
    }

    //header('Content-type: application/json');
    //echo json_encode($data);

    //Instead of echo data here, just put it into $result array
    $result['requirement_detail'] = $data;
}

$sqlDomain = mysqli_query($db, "SELECT * FROM dhms_domain_details where id='".$id."'");
if(mysqli_num_rows($sqlDomain)){
    $dataDomain = array();
    while($rowDomain = mysqli_fetch_array($sqlDomain)){
        $dataDomain[] = array(
                'id' => $rowDomain['id'],
            'dSelectDomain' => $rowDomain['dSelectDomain'],
            'dDomainName' => $rowDomain['dDomainName'],
            'dRegisterDomainFrom' => $rowDomain['dRegisterDomainFrom'],
            'dStartDate' => $rowDomain['dStartDate'],
            'dEndDate' => $rowDomain['dEndDate'],
            'dRegistrationFor' => $rowDomain['dRegistrationFor'],
        );
    }

    //header('Content-type: application/json');
    //echo json_encode($dataDomain);

    //Put this $dataDomain into $result array also.
    $result['domain_data'] = $dataDomain;
}


//Echo json data finally.
header('Content-type: application/json');
echo json_encode($result);

?>

And update your html part并更新您的 html 部分

<!--<div class="panel-body" ng-repeat="u in details track by $index">-->
<!-- Careful the details.requirement_detail -->
<div class="panel-body" ng-repeat="u in details.requirement_detail track by $index">
                    <div class="col-lg-6">
                        <ul class="list-group">
                            <li class="list-group-item"><strong>Req. NO.</strong> : {{u.id}}</li>
                            <li class="list-group-item"><strong>Contact Number</strong> : {{u.rContactNumber}}</li>
                            <li class="list-group-item"><strong>Email Address</strong> : {{u.rEmail}}</li>
                        </ul>
                    </div>
                    <div class="col-lg-6">
                        <ul class="list-group">
                            <li class="list-group-item"><strong>Client Name</strong> : {{u.rClientName}}</li>
                            <li class="list-group-item"><strong>Compnay Name</strong> : {{u.rCompanyName}}</li>
                            <li class="list-group-item"><strong>Requirement</strong> : {{u.rRequirement}}</li>

                        </ul>
                    </div>
                </div>
<!--<div class="panel-body" ng-repeat="u in details track by $index">-->
<!-- Careful the details.domain_data-->
<div class="panel-body" ng-repeat="u in details.domain_data track by $index">
            <div class="col-lg-6">
                <ul class="list-group">
                    <li class="list-group-item"><strong>Req. NO.</strong> : {{u.dSelectDomain}}</li>
                    <li class="list-group-item"><strong>dDomainName</strong> : {{u.dDomainName}}</li>
                    <li class="list-group-item"><strong>dRegisterDomainFrom</strong> : {{u.dRegisterDomainFrom}}</li>
                </ul>
            </div>
            <div class="col-lg-6">
                <ul class="list-group">
                    <li class="list-group-item"><strong>dStartDate</strong> : {{u.dStartDate}}</li>
                    <li class="list-group-item"><strong>dEndDate</strong> : {{u.dEndDate}}</li>
                    <li class="list-group-item"><strong>dRegistrationFor</strong> : {{u.dRegistrationFor}}</li>

                </ul>
            </div>
        </div>

Why should do like this?为什么要这样做?

  1. When you post your question:当您发布问题时:

    echo json_encode($data); after SELECT * FROM dhms_requirement ,SELECT * FROM dhms_requirement

    and then, again,然后,再次,

    echo json_encode($dataDomain); after SELECT * FROM dhms_domain_details ,SELECT * FROM dhms_domain_details

    so your response data should like this:所以你的响应数据应该是这样的:

    [...][...]

    It's invalid json data, as you saw the error in the console.这是无效的 json 数据,因为您在控制台中看到了错误。

  2. After updating php, I wrapped two select result into $result array, so your response data like this:更新 php 后,我将两个选择结果包装到$result数组中,因此您的响应数据如下:

    {"requirement_detail":[...],"domain_data":[...]}

  3. When loop in html template, your reference to detail, which is responsive data, divided into 2 parts, use detail.requirement_detail as first part, and domain_data as second part.当环在HTML模板,参考细节,它响应数据,分成2份,用detail.requirement_detail作为第一部分,和domain_data作为第二部分。

Should works.应该有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM