Формирование правильного J SON из базы данных
Все привет ,такой вопрос мне нужно сформировать список моделей авто. Веду в курс дела.
- Есть главная таблица
auct_lots_xml_jp
В ней строки company_en - Марка авто model_name_en - модель есть, еще но они не принципиальны сейчас. Код php который выводит список и даже сортирует его по моделям работает. Вот пример как это выглядит в адресной строке. company_en=HONDA&model_name_en=CIVIC&model_year_en=2008.
Вот пример кода сортировки. Он очень простецкий, но я новичок.
<?php
if (!isset($model_name_en)) {
// Если model_name_en не задано, отобразить все автомобили для выбранной company_en и model_year_en (если задано).
if (isset($model_year_en)) {
$query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' AND model_year_en = '$model_year_en' ORDER BY id DESC LIMIT 21";
} else {
$query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' ORDER BY id DESC LIMIT 21";
}
} else if (isset($model_year_en)) {
// Если задано model_name_en и model_year_en, отображаются автомобили для выбранной company_en, model_name_en и model_year_en
$query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' AND model_name_en = '$model_name_en' AND model_year_en = '$model_year_en' ORDER BY id DESC LIMIT 21";
} else if (isset($model_name_en)) {
// Если задано model_name_en и не задан model_year_en, отображаются автомобили для выбранной company_en и model_year_en
$query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' AND model_name_en = '$model_name_en' ORDER BY id DESC LIMIT 21";
} else {
// Если не заданы ни model_name_en, ни model_year_en, отобразите запрос по умолчанию
$query = "SELECT * FROM `auct_lots_xml_jp` ORDER BY id DESC LIMIT 21";
}
Дальше идет Java script с формированием списка. Марок , а потом моделей.
function loadModels() {
var elSelectBrand = document.getElementById("selectBrand");
var elSelectModel = document.getElementById("selectModel");
// Обработчик события изменения выбранного бренда (selectBrand)
elSelectBrand.addEventListener('change', function() {
// Получение выбранного бренда
var selectedBrands = [];
for (var i = 0; i < elSelectBrand.options.length; i++) {
if (elSelectBrand.options[i].selected) {
selectedBrands.push(elSelectBrand.options[i].value);
}
}
// Очищаем список моделей перед загрузкой новых
elSelectModel.innerHTML = "";
// Загружаем модели для выбранных брендов
if (selectedBrands.length > 0) {
// Формируем URL для запроса моделей
var url = "load_models.php?makes=" + encodeURIComponent(selectedBrands.join(","));
// Выполняем AJAX-запрос для получения моделей
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
// Обработка успешного ответа
var models = JSON.parse(xhr.responseText);
// Создание элементов <option> для каждой модели
for (var j = 0; j < models.length; j++) {
var option = document.createElement("option");
option.value = models[j];
option.text = models[j];
elSelectModel.appendChild(option);
}
// Удаление атрибута disabled
elSelectModel.removeAttribute("disabled");
} else {
// Обработка ошибки
console.error("Ошибка запроса моделей: " + xhr.status);
}
}
};
xhr.open("GET", url, true);
xhr.send();
}
});
}
В ошибке мне пишет, что не может сформировать правильный Json запрос. Вот код файла который я подключаю для обработки моделей.
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once('../admin-aj/conn/connectvars.php');
// Получаем выбранный производитель
$selectedCompanies = explode(",", $_GET['makes']);
$name = $_GET['id'];
if (isset($_GET['company_en'])) {
$company_en = $_GET['company_en'];
$model_name_en = $_GET['model_name_en'];
$model_year_en = $_GET['model_year_en'];
$mileage_en = $_GET['mileage_en'];
}
// Формируем запрос для получения уникальных моделей для выбранных производителей
if (!isset($model_name_en)) {
// Если model_name_en не задано, отобразить все автомобили для выбранной company_en и model_year_en (если задано).
if (isset($model_year_en)) {
$query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' AND model_year_en = '$model_year_en' ORDER BY id DESC ";
} else {
$query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' ORDER BY id DESC ";
}
} else if (isset($model_year_en)) {
// Если задано model_name_en и model_year_en, отображаются автомобили для выбранной company_en, model_name_en и model_year_en
$query = "SELECT * FROM `auct_lots_xml_jp` WHERE company_en = '$company_en' AND model_name_en = '$model_name_en' AND model_year_en = '$model_year_en' ORDER BY id DESC ";
}
// Выполняем запрос к базе данных
$result = mysqli_query($connection, $query);
// Формируем массив моделей
$models = array();
while ($info = mysqli_fetch_array($result)) {
$models[] = $info['model_name_en'];
}
// Возвращаем список моделей в формате JSON
echo json_encode($models);
?>
Текс ошибки
Uncaught SyntaxError: Unexpected token '<', "<br />
<b>"... is not valid JSON
at JSON.parse (<anonymous>)
at xhr.onreadystatechange (by_maker_new.php:715:31)
Вопрос что не так с Возвращаем списка моделей в формате JSON?. Спасибо.
Источник: Stack Overflow на русском