Я создал окно поиска для ключевых слов, и я хочу попробовать использовать JSON / AJAX для поиска ключевых слов, которые нужно ввести.
Последние два часа я безуспешно пытался заставить это работать, и я знаю, что что-то упустил, но не могу понять, как это сделать. Я просто получаю сообщение, результаты не могут быть загружены (это сообщение приходит от cdnjs для select2). Когда я загружаю страницу keyword_search.php, я получаю результаты в ожидаемом формате (см. Код ниже):
Я создал окно с несколькими вариантами выбора
<select class="js-example-basic-multiple" multiple="multiple" name="img_keywords[]" style="width:100%">
<?php
$path = $_SERVER['DOCUMENT_ROOT'];
$path .= "/includes/connections/mysqli.php";
require($path);
$sql = "SELECT *
FROM tbl_photos_keywords_all
GROUP BY pa_keyword
";
$data = $link->query($sql);
$keywords = $row['img_keywords'];
$selected = explode(',', $keywords);
while($row2 = $data->fetch_assoc()) {
$isSelected = in_array($row2['pa_keywordID'], $selected) ? "selected='selected'" : "";
echo "<option {$isSelected} value='{$row2['pa_keywordID']}'>{$row2['pa_keyword']}</option>";
}
$link->close();
?>
</select>
И мой код JavaScript:
<script>
$(document).ready(function() {
$('.js-example-basic-multiple').select2({
tags: true,
tokenSeparators: [","],
createSearchChoice: function (term, data) {
if (term.trim().length > 0) {
if ($(data).filter(function () {
return this.text.toLowerCase().localeCompare(term.toLowerCase()) === 0;
}).length === 0) {
return {
id: term,
text: term,
isNew: true // this is necessary to check if the item is newly added or not
};
}
}
},
multiple: true,
minimumInputLength: 1,
allowClear: true,
ajax: {
url: "keyword_search.php",
dataType: 'json',
type: "GET",
quietMillis: 50,
data: function (term) {
return {
term: name
};
},
results: function (data) {
return {
results: $.map(data, function (item) {
return {
id: item.id,
text: item.name
}
})
};
}
}
}
);
});
</script>
Мой файл keyword_search.php:
<?php
$path = $_SERVER['DOCUMENT_ROOT'];
$path .= "/includes/connections/mysqli.php";
require($path);
$sql = "SELECT *
FROM tbl_photos_keywords_all
ORDER BY pa_keyword
";
$data = $link->query($sql);
$dataPoints = array();
while($row2 = $data->fetch_assoc()) {
$point = array("id" => $row2['pa_keywordID'], "name"=> htmlspecialchars($row2['pa_keyword']));
array_push($dataPoints, $point);
}
echo json_encode($dataPoints, JSON_NUMERIC_CHECK);
$link->close();
?>