使用PHP实时托管MySQL不会连接到我的AngularJS

时间:2017-03-15 00:45:56

标签: javascript php mysql angularjs json

在我遇到一些错误后,我成功地用我的实时托管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进行测试时,如果我的代码实际工作的目的,那么好的事情发生了,我的数据显示。我仍然感到困惑,在这个过程中我错了,请帮忙。提前致谢

1 个答案:

答案 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