У меня есть файл JSON, загруженный таким образом (он отображает бизнес-список в Google Map):
var _latitude = 40.4379543;
var _longitude = -3.6795367;
var jsonPath = 'assets/json/items.json.php';
// Load JSON data and create Google Maps
$.getJSON(jsonPath)
.done(function(json) {
createHomepageGoogleMap(_latitude,_longitude,json);
})
.fail(function( jqxhr, textStatus, error ) {
console.log(error);
})
;
И items.json.php имеют это:
{
"data": [
{
"id": <?php echo 1; ?>,
"category": "real_estate",
"title": "<?php echo "q"; ?>",
"location": "<?php echo "a"; ?>",
"latitude": 51.541599,
"longitude": -0.112588,
"url": "item-detail.html",
"type": "Apartment",
"type_icon": "assets/icons/store/apparel/umbrella-2.png",
"rating": 4,
"gallery":
[
"assets/img/items/1.jpg",
"assets/img/items/5.jpg",
"assets/img/items/4.jpg"
],
"features":
[
"Free Parking",
"Cards Accepted",
"Wi-Fi",
"Air Condition",
"Reservations",
"Teambuildings",
"Places to seat"
],
"date_created": "2014-11-03",
"price": "$2500",
"featured": 0,
"color": "",
"person_id": 1,
"year": 1980,
"special_offer": 0,
"item_specific":
{
"bedrooms": 4,
"bathrooms": 2,
"rooms": 4,
"garages": 1,
"area": 240
},
"description": "asasasas odio nibh, luctus non pulvinar a, ultricies ac diam. Donec neque massa, viverra interdum eros ut, imperdiet pellentesque mauris. Proin sit amet scelerisque risus. Donec semper semper erat ut mollis. Curabitur suscipit, justo eu dignissim lacinia, ante sapien pharetra duin consectetur eros augue sed ex. Donec a odio rutrum, hendrerit sapien vitae, euismod arcu.",
"last_review": "Curabitur odio nibh, luctus non pulvinar a, ultricies ac diam. Donec neque massa, viverra interdum eros ut, imperdiet",
"last_review_rating": 5
}
]
}
Он работает нормально, но если я включаю циклы, он терпит неудачу:
{
"data": [
<?php
$qtodos = $mysqli->query("SELECT * FROM negocios");
if($qtodos->num_rows != 0) {
while($todos = $qtodos -> fetch_assoc()) {
?>
{
"id": <?php echo $todos['idnegocios']; ?>,
"category": "real_estate",
"title": "<?php echo $todos['nombre']; ?>",
"location": "<?php echo $todos['direccion']; ?>",
"latitude": 51.541599,
"longitude": -0.112588,
"url": "item-detail.html",
"type": "Apartment",
"type_icon": "assets/icons/store/apparel/umbrella-2.png",
"rating": 4,
"gallery":
[
"assets/img/items/1.jpg",
"assets/img/items/5.jpg",
"assets/img/items/4.jpg"
],
"features":
[
"Free Parking",
"Cards Accepted",
"Wi-Fi",
"Air Condition",
"Reservations",
"Teambuildings",
"Places to seat"
],
"date_created": "2014-11-03",
"price": "$2500",
"featured": 0,
"color": "",
"person_id": 1,
"year": 1980,
"special_offer": 0,
"item_specific":
{
"bedrooms": 4,
"bathrooms": 2,
"rooms": 4,
"garages": 1,
"area": 240
},
"description": "asasasas odio nibh, luctus non pulvinar a, ultricies ac diam. Donec neque massa, viverra interdum eros ut, imperdiet pellentesque mauris. Proin sit amet scelerisque risus. Donec semper semper erat ut mollis. Curabitur suscipit, justo eu dignissim lacinia, ante sapien pharetra duin consectetur eros augue sed ex. Donec a odio rutrum, hendrerit sapien vitae, euismod arcu.",
"last_review": "Curabitur odio nibh, luctus non pulvinar a, ultricies ac diam. Donec neque massa, viverra interdum eros ut, imperdiet",
"last_review_rating": 5
},
<?php
}
}
?>
]
}
Журнал консоли:
SyntaxError: Unexpected token <
at Object.parse (native)
at o.parseJSON (http://localhost/Proyectos/directorio/assets/js/jquery-2.1.0.min.js:4:4701)
at e.parseJSON (http://localhost/Proyectos/directorio/assets/js/jquery-migrate-1.2.1.min.js:2:2943)
at vc (http://localhost/Proyectos/directorio/assets/js/jquery-2.1.0.min.js:4:6789)
at x (http://localhost/Proyectos/directorio/assets/js/jquery-2.1.0.min.js:4:10194)
at XMLHttpRequest.o.ajaxTransport.l.cors.a.crossDomain.send.b (http://localhost/Proyectos/directorio/assets/js/jquery-2.1.0.min.js:4:14159)
Мой вопрос: почему, если я включаю цикл, он терпит неудачу, и если я включаю просто эхо с PHP, это не подведет?
попробуйте этот путь. использовать json_encode()
items.json.php
<?php
$qtodos = $mysqli->query("SELECT * FROM negocios");
if($qtodos->num_rows != 0) {
while($todos = $qtodos -> fetch_assoc()) {
$google_data = array(
"id"=> $todos['idnegocios'],
"category"=> "real_estate",
"title"=> $todos['nombre'],
"location"=> $todos['direccion'],
"latitude"=> 51.541599,
"longitude"=> -0.112588,
"url"=> "item-detail.html",
"type"=> "Apartment",
"type_icon"=> "assets/icons/store/apparel/umbrella-2.png",
"rating"=> 4,
"gallery"=>array(
"assets/img/items/1.jpg",
"assets/img/items/5.jpg",
"assets/img/items/4.jpg"),
"features"=>
.....
..
);
}
}
echo json_encode($google_data);
?>
echo json_encode(array("data"=> $google_data));
Это не удалось, потому что в начале файла появляется ошибка. Я забыл потребовать файл конфигурации в этом файле.
}, <?php
- проблема, без запятой после последнего значения в массиве в JSON.