在我遇到一些错误后,我成功地用我的实时托管mysql创建了PHP连接器,但不幸的是我的AngularJS无法连接。我创建了json格式的php,名为json.php
<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
$conn = new mysqli("domain","user","pass","db_name");
$result = $conn->query("SELECT UID, Name, City, Country FROM records");
$outp = "";
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
if ($outp != "") {$outp .= ",";}
$outp .= '{"UID":"' . $rs["UID"] . '",';
$outp .= '{"Name":"' . $rs["Name"] . '",';
$outp .= '"City":"' . $rs["City"] . '",';
$outp .= '"Country":"'. $rs["Country"] . '"}';
}
$outp ='{"records":['.$outp.']}';
$conn->close();
echo($outp);
?>
我的控制器
var testAppApp = angular.module('testAppApp', []);
testAppApp.controller('SimpleController', function ($scope, $http) {
$http.get('json.php')
.then(function(takeprocess) {
$scope.customers = takeprocess.data.records;
});
});
我的index.html
<html ng-app="testAppApp">
<head>
..................
..................
</head>
<div ng-controller="SimpleController">
Search <input type="text" ng-model="filter.name" />
<ul>
<li ng-repeat="cust in customers | filter:filter.name">{{cust.UID}} -
{{cust.Name}} - {{cust.City}} - {{cust.Country}}</li>
</ul>
</div>
<script src="bower_components/angular/angular.js"></script>
<script src="scripts/controllers/SimpleController.js"></script>
</body>
</html>
实际上,当我使用Apache Server在MAMP(用于测试)中运行json.php时,数据如下所示
{"records":[{"UID":"1",{"Name":"Konohamaru","City":"Leaf Village","Country":"Konoha District"},{"UID":"2", {"Name":"Gaara","City":"Sand Village","Country":"Sand Desert Union"}]}
这意味着,我对实时托管sql server,身份验证或任何问题没有任何问题。这很有效。但奇怪的是,当我直接使用&#34; localhost:9000 / json.php&#34;访问php文件时。代码无法显示任何内容,而是浏览器下载我的脚本。
注意: 我的控制台也没有显示错误通知,但是当我运行&#34; Grunt Server&#34;并采取进程打开localhost:9000我的应用程序没有显示我的实时主机数据库中的任何虚拟数据。但是,当我使用data.json进行测试时,如果我的代码实际工作的目的,那么好的事情发生了,我的数据显示。我仍然感到困惑,在这个过程中我错了,请帮忙。提前致谢
答案 0 :(得分:0)
好吧,我终于成功了。首先,我不知道代理问题或什么。但是因为我知道grunt无法执行PHP文件(在修改之前),后来我搜索错误的我的项目。
首先,我已经表示Grunt Server无法执行PHP,因此我必须根据这篇文章"Use PHP with your Yeoman dev server"修改gruntfile.js但是老实说,没有一步一步地轻松地放置你的方式和位置码。在快捷方式中,我将我的代码放在Gruntfile.js(靠近顶部)
// Generated on 2017-03-13 using generator-angular 0.16.0
'use strict';
var lrSnippet = require('grunt-contrib-
livereload/lib/utils').livereloadSnippet;
var gateway = require('gateway');
var mountFolder = function (connect, dir) {
return connect.static(require('path').resolve(dir));
};
在这里......
livereload: {
options: {
open: true,
middleware: function (connect) {
return [
lrSnippet,
gateway(__dirname + '/app', {
'.php': 'php-cgi'}),
mountFolder(connect, '.tmp'),
mountFolder(connect, 'app'),
connect.static('.tmp'),
connect().use(
'/bower_components',
connect.static('./bower_components')
),
connect().use(
'/app/styles',
connect.static('./app/styles')
),
connect.static(appConfig.app)
];
}
}
},
在特定部分,我在下面添加返回[.....
lrSnippet,
gateway(__dirname + '/app', {
'.php': 'php-cgi'}),
mountFolder(connect, '.tmp'),
mountFolder(connect, 'app'),
之后,我编辑我的json.php,如下所示
<?php
//open connection to mysql db
$connection = mysqli_connect("hosting","username","pass","db_name") or die("Error " . mysqli_error($connection));
//fetch table rows from mysql db
$sql = "select * from records";
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
//create an array
$emparray = array();
while($row =mysqli_fetch_assoc($result))
{
$emparray[] = $row;
}
header('Content-Type: application/json');
echo json_encode($emparray);
//write to json file
//$fp = fopen('data.json', 'w');
//fwrite($fp, json_encode($emparray));
//fclose($fp);
//close the db connection
mysqli_close($connection);
?>
稍微编辑我的控制器
var testAppApp = angular.module('testAppApp', []);
testAppApp.controller('SimpleController', function ($scope, $http) {
$http.get('json.php')
.then(function(takeprocess) {
$scope.customers = takeprocess.data;
});
});
稍后,我开始“Grunt Build”并尝试“Grunt Server”。我的应用程序显示在localhost:9000但仍然空白,但当我更改我的Wifi。我的应用程序就像魅力一样,我可以将我的Live托管MySQL与我当地的Grunt连接起来。
但是,似乎我有复杂的事情,我的Grunt以前不支持阅读PHP,我怀疑我的网络不稳定或有代理问题,我不知道。但是当我再次尝试时,使用默认设置清理我的项目(在Gruntfile.js中没有网关设置)。我的应用程序再次出现错误。
我希望这对每个与我有相同经历的人都有所帮助。
注意:您必须完成多个依赖项,在项目中安装网关而不是全局
npm install gateway
如果你注意到这里......
var lrSnippet = require('grunt-contrib-livereload/lib/utils').livereloadSnippet;
变量LrSnippet需要依赖性grunt-contrib-
livereload,只是做
npm install grunt-contrib-livereload
如果需要,sudo