Я пытаюсь использовать jquery-UI для создания автозаполнения.
Мне нужно получить некоторые теги из БД, и я использую этот код для этого:
autocomplete.php
$db = new mysqli('localhost', 'user', 'pass', 'db');
if ($db->connect_errno > 0) {
die('Unable to connect to database [' . $db->connect_error . ']');
}
$all_tags = array();
$query = "select keyword from nickwebd_web_res.resources limit 0,10";
$result = mysqli_query($db, $query) or die(mysqli_error($db));
while ($row = $result->fetch_assoc()) {
$tags = $row['keyword'];
$row_tags = explode(", ", $tags);
$all_tags = array_merge($all_tags, $row_tags);
}
$all_tags = array_unique($all_tags);
sort($all_tags);
$encodedData = json_encode($all_tags);
echo json_encode($encodedData);
и от JS:
var tagInput = $('#keywords');
tagInput.tagEditor({
delimiter: ', ',
autocomplete: {
source: "autocomplete.php"}
});
но если я пытаюсь напечатать, я получаю эту ошибку:
jquery.js: Uncaught TypeError: Невозможно использовать оператор «in» для поиска
‘103’ в [«background», «color», «test»]
Автозаполнение использует этот плагин здесь: https://goodies.pixabay.com/jquery/tag-editor/demo.html
что я тут не так делаю?
спасибо за любую помощь
Я решил это. Вероятно, это не лучшее решение, но оно работает, и я могу жить с этим, так или иначе, для личного проекта.
Вот изменения в файле php:
$encodedData = json_encode($all_tags);
в javascript мне требуется один раз php-файл, содержащий указанную выше переменную, например:
<?php require_once ('autocomplete.php') ?>
а затем я создаю переменную, как показано ниже:
var localSource = <?php echo $encodedData ?>;
и, наконец, я использую эту переменную в качестве источника для автозаполнения:
tagInput.tagEditor({
delimiter: ', ',
autocomplete: {
source: localSource,
position: { collision: 'flip' },
minLength: 2
}
});
и теперь все работает правильно.
Других решений пока нет …