Я использую плагин DevBridge jQuery Autocomplete с опцией ajax (вместо этого используется serviceURL, а НЕ lookup).У меня есть php-файл, который запрашивает БД (WordPress FYI) и получает все результаты просто отлично.Поэтому, когда пользователи вводят в мое поле автозаполнения, он показывает ВСЕ результаты с выделенным запросом.Очевидно, мой серверный скрипт должен обрабатывать поиск и возвращать ТОЛЬКО отфильтрованные результаты, основанные на вводимых пользователем данных на лету.Я просто не знаю, как это сделать.
Я нашел тонну постов в Интернете, в которых говорится, что это должно работать, но не могу найти никаких рабочих примеров файла serviceURL, который возвращает отфильтрованные результаты, основанные на том, что печатает пользователь.
Вот код, который у меня есть ...
Мой jQuery ...
$('#product_sku_autocomplete').autocomplete({
serviceUrl: '/blah/blah/ajax-product-sku.php',
minChars: 1,
onSelect: function (suggestion) {
alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
}
});
содержимое моего файла ajax-product-sku.php.Это получает все различные мета-значения для настраиваемого поля (sku) для всех «продуктов»
if ( ! defined('ABSPATH') ) {
require_once( '../../../../wp-load.php' );
}
global $wpdb;
$term = $_GET['query'];
$query = $wpdb->get_col( $wpdb->prepare( "
SELECT pm.meta_value FROM {$wpdb->postmeta} pm
LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
WHERE pm.meta_key = %s
AND p.post_status = %s
AND p.post_type = %s
", 'sku', 'publish', 'products' ) );
$reply = array();
$reply['query'] = $term;
$reply['suggestions'] = array();
foreach ($query as $sku) {
$reply['suggestions'][] = array(
"value" => $sku,
"data" => $sku
);
}
echo json_encode($reply);
Результаты, если я получаю прямой доступ к ajax-product-sku.php ...
{"query":null,"suggestions":[{"value":"52N242","data":"52N242"},{"value":"52F230","data":"52F230"},{"value":"52F235","data":"52F235"}]}
Итак, я получаю полный список результатов (насколько мне известно, правильно отформатированный), и поле автозаполнения извлекает НО, когда вы вводите в поле автозаполнения, оно показывает ВСЕ результаты, а не только те, которые соответствуютПользователь набрал.
Я подозреваю, что мне нужно добавить $ term var где-нибудь в моем запросе db $ query, но не уверен, как.Любая помощь с благодарностью.