我的MySQL输出有问题
getCustomers.php 是
$query="select distinct c.ancestry, c.trusted from members c order by c.id";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
$arr = array();
if($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$arr[] = json_encode($row);
}
}
# JSON-encode the response
$json_response = json_encode($arr);
// # Return the response
echo $json_response;
和控制器代码:
app.controller('customersCrtl', function ($scope, $http, $timeout) {
$http.get('ajax/getCustomers.php').success(function(data){
$scope.list = data;
$scope.currentPage = 1; //current page
$scope.entryLimit = 100; //max no of items to display in a page
$scope.filteredItems = $scope.list.length; //Initially for no filter
$scope.totalItems = $scope.list.length;
});
$scope.setPage = function(pageNo) {
$scope.currentPage = pageNo;
};
$scope.filter = function() {
$timeout(function() {
$scope.filteredItems = $scope.filtered.length;
}, 10);
};
$scope.sort_by = function(predicate) {
$scope.predicate = predicate;
$scope.reverse = !$scope.reverse;
};
});
问题是我从MySQL获得这种格式(例如):
["{\"ancestry\":\"12865794218\",\"trusted\":\"128\"}"]
但可以预见的是:
[{"ancestry":"1286794218","trusted":"126"}]
所以,如果我在数据中写入常量,它就可以完美地运行
$scope.list = [{"ancestry":"1286794218","trusted":"126"}];
感谢您的帮助。
答案 0 :(得分:1)
您对回复进行了双重编码。反斜杠就在那里,因为json_encode
的第二个应用程序在第一个应用程序的输出中转义了双引号。从while循环中删除json_encode
。
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$arr[] = $row; // don't encode here
}
}
之后只需编码一次(就像你原来那样。)
$json_response = json_encode($arr);
答案 1 :(得分:1)
我认为您需要在PHP代码中使用header('Content-Type: application/json');
,以便服务器以JSON内容类型进行响应。
您的json_encode
循环内的代码中也存在重复的while
,因此您正在执行重复的json编码,因此意外的输出
答案 2 :(得分:0)
在您的回复中使用JSON.parse()。 JSON.parse docs