将mysql中的json数据返回到angular文件中 - 从文本文件中工作,但不是从php中工作

时间:2013-01-15 16:48:42

标签: json angularjs

非常新的棱角分明 - 此刻正在探索。非常感谢指针或两个关于我在这里拧的地方 - TIA

我想要做的是从mysql select查询中获取数据并将其返回到html页面,使用json然后使用angular来显示它。 成功使用JSON_encode返回数据 - 通过jsonlint运行它并且它已经恢复正常。为了测试,我接着这个字符串并创建了一个文本文件,并通过角度文件运行 - 它工作正常。

如果我直接从php文件调用数据它会失败,但是如果我从静态文本文件中调用数据(看起来与php数据的输出相同),它就可以工作。

我用echo发送数据 - 这是正确的吗?

$json=json_encode($main_arr); 
echo $json;

json输出:

[{"custcode":"CMZIG001","cli":"0020\/1"},{"custcode":"CMZIG002","cli":"0020\/2"},{"custcode":"CMZIG003","cli":"0020\/3"},{"custcode":"999","cli":"002871365801"},{"custcode":"CMSLE001","cli":"0030"},{"custcode":"CMNIC001","cli":"0034"},{"custcode":"CMLIF001","cli":"0047"},{"custcode":"CMTON01101","cli":"0087\/1"},{"custcode":"CMTON01102","cli":"0087\/2"},{"custcode":"CMTRE001","cli":"0090"}]

文本文件内容:

[{"custcode":"CMZIG001","cli":"0020\/1"},{"custcode":"CMZIG002","cli":"0020\/2"},{"custcode":"CMZIG003","cli":"0020\/3"},{"custcode":"999","cli":"002871365801"},{"custcode":"CMSLE001","cli":"0030"},{"custcode":"CMNIC001","cli":"0034"},{"custcode":"CMLIF001","cli":"0047"},{"custcode":"CMTON01101","cli":"0087\/1"},{"custcode":"CMTON01102","cli":"0087\/2"},{"custcode":"CMTRE001","cli":"0090"}] 

回应评论:

好的 - 我原本希望不要厌恶我的代码。一个html文件如下(我将尝试正确格式化)

<!doctype html>
<html ng-app="App">
<head>
    <meta charset="utf-8">
    <title>CLIs http</title>
    <link rel="stylesheet" href="style.css">
    <script>document.write("<base href=\"" + document.location + "\" />");</script>
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js">      
</script>
    <script src="app.js"></script>

</head>

<body ng-controller="TodoCtrl">
    <ul>
        <li ng-repeat="cli in cli">
            {{cli.custcode}} - <em>{{cli.cli}}</em>                
        </li>
    </ul>

</body>
</html>

app.js - 目前设置为在我的服务器上调用php文件

var App = angular.module('App', []); 

App.controller('TodoCtrl', function($scope, $http) {

 $http.get('http://localhost/t5/clis.json')
 //$http.get('njs.json') 

.then(function(res){

$scope.cli = res.data;

});

});

clis.json(我服务器上的php文件)     

$con = mysql_connect("localhost","root","password");
if (!$con)
  {
die('Could not connect: ' . mysql_error());
}
$db='mutuxf';
mysql_select_db($db, $con);

$result = mysql_query("SELECT custcode, cli  FROM clis limit 10");


 while($row = mysql_fetch_assoc($result))
{   
foreach($row as $key => $value)
{    $arr[$key] = $value; }

$main_arr[] = $arr;
}
 $json=json_encode($main_arr); 
 echo $json;


?> 

当我使用php文件来提升数据时,我只是得到一个没有文本的项目符号列表,但是当我使用文本文件(njs.json)时,页面正常工作。

2 个答案:

答案 0 :(得分:1)

首先,我建议从.then()切换到.success()和.error(),这样你就知道一切进展顺利。

除此之外,由于问题信息缺乏且相当普遍,我敢打赌,服务器上的json获取和构建部分是问题所在。 maybe this link would help

他们获取它的方式:

$data = file_get_contents("php://input");
$objData = json_decode($data);

注意评论,这可能是关键:

// The request is a JSON request.
// We must read the input.
// $_POST or $_GET will not work!

一般情况下 - 如果您可以选择在后端添加或切换框架,我建议使用symfony / django for php或使用RABL / GON切换到RoR以生成jsons。它更加简单直观。 希望它有所帮助,因为我使用了vanilla php已经有一段时间了。

答案 1 :(得分:0)

这是因为你不能在.json文件中运行php,clis.json需要是clis.php,或者你可以让php脚本写入一个单独的json文件,它将保存数据