Я строю проект с угловым и php, у меня есть таблица "файлов", в которой я могу загружать файлы, используя только php. теперь я пытаюсь получить все данные о файлах в моей базе данных. моя ошибка в консоли:
angular.js:13550 SyntaxError: Unexpected token < in JSON at position 0
at Object.parse (native)
может кто-нибудь, пожалуйста, проверьте мой код?
Php для отображения:
<?php header('Content-Type: text/html; charset=utf-8');
$connection = mysqli_connect('localhost','root','','hamatkin');
mysqli_query($connection,"SET character_set_client = utf8");
mysqli_query($connection,"SET character_set_connection = utf8");
mysqli_query($connection,"SET character_set_results = utf8");
if(!$connection){
die("couldnt connect".mysqli_error);
}
$query = "SELECT * FROM 'file' ";
$queryResult = $connection->query($query);
$queryResult2 = array();
if($queryResult === FALSE) { die($connection->error); }
if( $queryResult->num_rows>0){
while($row = $queryResult->fetch_assoc()){
$queryResult2[] = $row;
}
}
$queryResult3 = json_encode($queryResult2);
echo json_encode($queryResult3);
?>
контроллер:
"use strict";
angular.module('dataSystem').controller('allPriceOffersCtrl', function($scope,$route,$location,$http) {
$http({method:'GET', url:'api/customers-tab/get-all-priceOffers.php/'})
.then(function(response) {
var arr = JSON.parse(JSON.parse(response.data));
$scope.files = arr;
})
// This will log you the error code and trace, if there is an error.
.catch(function(err) {
console.log('err', err)
});
});
Html:
<div class="table-responsive">
<table class="customer-list table table-striped">
<thead>
<tr>
<th class="Column-Header">מספר</th>
<th class="Column-Header">משו</th>
<th class="Column-Header">שם מלא</th>
<th class="Column-Header">ת.ז./עוסק מורשה</th>
<th class="Column-Header">עיר</th>
<th class="Column-Header">כתובת</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="x in files">
<!-- <td>{{$index + 1}}</td> -->
<td>{{ x.id}}</td>
<td>{{ x.name}}</td>
<td>{{ x.mime}}</td>
<td> {{ x.size}} </td>
<td> {{ x.data}} </td>
<td> {{ x.created}} </td>
</tr>
</tbody>
</table>
</div>
Типичный случай отладочно-недружественного кода.
Во-первых, вы должны проверить, может ли ваш $connection->query
возвращать ошибку, то есть возвращаемое значение не является набором результатов, а false
. Так
if($queryResult === false) {
die($connection->error);
}
Даже тогда у вас должен быть "нормальный" результат, то есть вы ожидаете массив массивов, поэтому $queryResult2
по крайней мере должен быть инициализирован как массив:
$queryResult2 = array(); // before the while loop.
Кроме того: вам абсолютно не нужно проверять num_rows
, просто выполняйте цикл while, потому что он просто не сделает ничего плохого, если нет строк. fetch
- это умный!
Как оказалось, date
столбца, которая упорядочивается, не существует.
После отладки до смешного долгого времени мы выяснили, что, вероятно, двоичные данные, хранящиеся в базе данных, и json_encode()
возвращены false из-за "искаженного символа utf8". Часть угловой части должна была быть приспособлена, чтобы не расшифровывать/разбирать json слишком часто. Я был в предположении, что никакие двоичные данные не были сохранены в базе данных. Пусть это будет предупреждением, не имеют никаких предположений при отладке. Всегда проверяйте значения ошибок.
Друг-код помогает. Пожалуйста, мир, напишите дружественный отладочный код, потому что это не так много хлопот, и отладка становится такой же простой, как помещать сообщение об ошибке в какую-то поисковую систему и не позволять stackoverflow отлаживать ваш код в комментариях к вашему вопросу.
date
где это может быть ... created
?
$queryResult2=array();
прежде чем использовать его. вероятно, не исправит вашу ошибку, но все же следует это сделать