簡體   English   中英

無法使用 PHP 和 Angular JS 獲取 JSON 數據

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

我正在傳遞 ID 以使用 Angular JS 獲取 JSON 編碼數據。

這是我的控制器:

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

這是我的 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);
}



?>

這是我獲取數據的 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>

它在控制台中顯示錯誤。 請看下圖Chrome 開發者工具視圖。 Javascript 錯誤消息顯示“SyntaxError: Unexpected token [in JSON at position 182

您確實回顯了 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);

?>

並更新您的 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>

為什么要這樣做?

  1. 當您發布問題時:

    echo json_encode($data); SELECT * FROM dhms_requirement

    然后,再次,

    echo json_encode($dataDomain); SELECT * FROM dhms_domain_details

    所以你的響應數據應該是這樣的:

    [...][...]

    這是無效的 json 數據,因為您在控制台中看到了錯誤。

  2. 更新 php 后,我將兩個選擇結果包裝到$result數組中,因此您的響應數據如下:

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

  3. 當環在HTML模板,參考細節,它響應數據,分成2份,用detail.requirement_detail作為第一部分,和domain_data作為第二部分。

應該有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM