1
<script type="text/javascript"> 
$(function() { 
$("#customers").autocomplete({ 
source: 'search.php' 
}); 
}); 
</script> 
<div class="ui-widget"><input id="customers" name="Cno" placeholder="Customer Name"></div> 

search.phpJQuery UI автозаполнения медленно выбирающий элемент

<?php include('header.php'); 
//get search term 
$searchTerm = $_GET['term']; 
//get matched data from skills table 
$query = $db->query("SELECT * FROM customers WHERE Customer_Name LIKE '%".$searchTerm."%' ORDER BY Customer_Name ASC"); 
while ($row = $query->fetch_assoc()) { 
$data[] = $row['Customer_Name']; 
} 
//return json data 
echo json_encode($data); 
?> 

Для некоторых массивов не работает нормально, как я описал в Jquery UI not working properly for some words И я добавил этот код

$mysqli->set_charset('utf8mb4') 

Тогда я сталкиваясь с проблемой при выборе элемента из выпадающего списка, требуется слишком много времени, чтобы преобразовать класс li в ui-state-active, как его решить?

Любая помощь будет замечательной!

+0

Во-первых, ваш PHP-код уязвим для SQL-инъекций. Когда вы просматриваете свою консоль JS, вы видите, если запрос GET занимает ненормально длинный? Вы можете добавить 'minLength: 3', чтобы уменьшить возвращаемый набор результатов. – Twisty

ответ

0

Что касается вашего PHP, я бы посоветовал:

PHP

<?php 
    include('header.php'); 
    //get search term 
    $searchTerm = $_GET['term']; 
    $data = array(); 
    //get matched data from skills table 
    $query = $db->prepare("SELECT * FROM customers WHERE Customer_Name LIKE '%?%' ORDER BY Customer_Name ASC"); 
    $query->bind_param('s', $searchTerm); 
    $query->execute(); 
    $results = $query->get_result(); 
    while ($row = $results->fetch_assoc()) { 
    $data[] = $row['Customer_Name']; 
    } 
    $query->close(); 
    $db->close(); 
    //return json data 
    header('Content-Type: application/json'); 
    echo json_encode($data); 
?> 

Это поможет защитить ваши скрипты от SQL Injection.

Что касается вашей JQuery, я бы посоветовал:

JavaScript

$(function() { 
    $("#customers").autocomplete({ 
    minLength: 3, 
    source: 'search.php' 
    }); 
}); 

Если ввести 'сим', автозаполнения будет отправить на ваш PHP через GET. Ответ будет выглядеть примерно так:

[ 
    "Bart Simpson", 
    "Homer Simpson", 
    "Lisa Simpson", 
    "Maggie Simpson", 
    "Marge Simpson" 
] 

В вашей консоли вы должны увидеть это действие и просмотреть время выполнения. Это покажет вам, как долго PHP пытается ответить на запрос. Эти данные должны сразу загружаться в автозаполнение.

Если вы видите медленность, вам нужно будет определить, находится ли она на вашем PHP или JavaScript. Это определит, где искать проблемы.