从 Angular 范围的 php 文件中获取 json 数据

Posted

技术标签:

【中文标题】从 Angular 范围的 php 文件中获取 json 数据【英文标题】:GET json data from a php file for an Angular scope 【发布时间】:2014-09-23 17:35:15 【问题描述】:

我正在尝试从 php 文件中获取 json 数据以在 Angular 控制器中使用。我在 php 文件中回显 json_encode(pg_fetch_assoc($result));,当我在角度控制器中 console.log($scope.contents); 时,它会带回 json 数据,但是当我尝试执行 ng-repeat 时它会返回空。

controllers.js

myApp.controller('ContentCtrl', function ($scope, $http) 
  $http(method: 'GET', url: 'content.php').success(function(data) 
    $scope.contents = data;
  );
);

content.php

<?php
require_once("sdb.php");
$result = pg_query($dbconn, "SELECT * FROM content ORDER BY name ASC");
echo json_encode(pg_fetch_assoc($result));

index.php

<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="css/style.css"/>
</head>
<body ng-app="myApp">
 <div ng-controller="ContentCtrl">
   <ul>
     <li ng-repeat="content in contents">
       <a href="#">content.name</a>
     </li>
   </ul>
 </div>
</body>
   <script src="js/jquery-1.10.2.js"></script>
   <script src="js/angular.min.js"></script>
   <script src="js/controllers.js"></script>
</html>

【问题讨论】:

【参考方案1】:

您需要实际以 JSON 格式发送数据。为此,您只需在echo 语句之前添加header('Content-Type: application/json');。所以 content.php 变成了:

<?php
require_once("sdb.php");

$result = pg_query($dbconn, "SELECT * FROM content ORDER BY name ASC");

header('Content-Type: application/json');
echo json_encode(pg_fetch_assoc($result));

顺便说一句,您可能需要对控制器进行一些操作。我会改变这个:

myApp.controller('ContentCtrl', function ($scope, $http) 
    $http(method: 'GET', url: 'content.php').success(function(data) 
        $scope.contents = data;
    );
);

到这里:

myApp.controller('ContentCtrl', ['$scope', '$http', function ($scope, $http) 
    $http.get('content.php')
    .success(function(data) 
        $scope.contents = data;
    );
]);

函数定义前附加的'$scope', '$http',可以让你以后缩小,.get只是个人喜好,不过我觉得读起来更干净。

【讨论】:

感谢您的快速答复!

以上是关于从 Angular 范围的 php 文件中获取 json 数据的主要内容,如果未能解决你的问题,请参考以下文章

Angular:无法使用 HttpClient 获取本地 json

php 从指定的日期范围中获取记录

具有范围的 Angular2 指令

@auth0/angular-jwt : 从解码的令牌中获取声明

如何在 Angular 表达式中获取一种范围变量?

如何使用范围变量将值从控制器获取到指令中