Автозаполнение Jquery Пользовательский интерфейс не работает на JSON - PullRequest
0 голосов
/ 19 января 2020

У меня проблемы с функцией автозаполнения jqueryUI.

Вот код моего скрипта.

<script src="jquery.min.js"></script>
<script src="jquery-1.12.4.js"></script>
<script src="jquery-ui.js"></script>
<script type="text/javascript">
$(function (){
  $("#names").autocomplete({
    source: "tags.php"
  });
});
</script>

Вот код для моих тегов. php

<?php
  include_once("connect.php");
  $sql = "SELECT full_name FROM tbl_names";
  $result = mysqli_query($conn, $sql);
  $data = array();
  while ($row = mysqli_fetch_assoc($result)) {
    $data[] = $row['full_name'];
  }
  echo json_encode($data);
?>

Вот код моего соединения. php:

<?php
  $server = "localhost";
  $username = "root";
  $password = "";
  $database = "yrock_attendance";
  $conn = mysqli_connect($server, $username, $password, $database);
  if (!$conn) {
    die("Connection failed!");
  }
?>

А вот часть вывода моих тегов. php

["ABANEZ, JAMICHA","ABANI, MART JOSEPH","ABINION, KARL AXEL ","ABLAO, YZEL RONNELAINE","ACIDELLA, MARY GRACE","ACUNA, NATH MIGUEL"]

Каждый раз, когда я печатаю в поле ввода, он показывает все мои данные и ничего не фильтрует.

1 Ответ

0 голосов
/ 19 января 2020

Если вы просматриваете:

String : Когда используется строка, плагин автозаполнения ожидает, что эта строка будет указывать на ресурс URL, который будет возвращать данные JSON. Это может быть на том же хосте или на другом (должен поддерживать CORS). Плагин автозаполнения не фильтрует результаты, вместо этого в строку запроса добавляется поле термина, которое серверный сценарий должен использовать для фильтрации результатов. Например, если для параметра source установлено значение "http://example.com", а пользователь вводит foo, запрос GET будет отправлен на http://example.com?term=foo. Сами данные могут быть в том же формате, что и локальные данные, описанные выше.

Поэтому вам нужно выполнить фильтрацию самостоятельно в SQL или в JavaScript с результирующими данными. Вот пример SQL:

<?php
  include_once("connect.php");
  $term = mysqli_real_escape_string($con, $_GET['term']);
  $sql = "SELECT full_name FROM tbl_names WHERE full_name LIKE '$term%';";
  $result = mysqli_query($conn, $sql);
  $data = array();
  while ($row = mysqli_fetch_assoc($result)) {
    $data[] = $row['full_name'];
  }
  echo json_encode($data);
?>

Для этого базового c примера я использовал mysqli_real_escape_string(), но было бы лучше использовать Prepared Statement. Подробнее: https://www.php.net/manual/en/security.database.sql-injection.php

...