#javascript #php #jquery #autocomplete
#javascript #php #jquery #автозаполнение
Вопрос:
У меня есть 2 удаленных php-скрипта в качестве источников данных, и я хочу вызывать каждый на основе пользовательского префикса ввода. Я не мог найти, как это сделать с помощью автозаполнения jquery или с помощью javascript. Вероятно, мне потребуется вызвать функцию регулярных выражений, чтобы решить, какой источник данных использовать.
Я получаю пользовательский ввод из обычного текстового поля формы:
<script type="text/javascript">
jQuery(document).ready(function() {
$('#srv_search').autocomplete({
source:'srv_search.php',
minLength:2});
});
</script>
<form action="site.php" method="post">
<input type="text" id="srv_search" name="server" value="" style="width: 80%;">
<input type="submit" value="Go">
</form>
Спасибо,
Дэвид
PS, это то, что я пробовал на основе ответа и не работает:
$('#srv_search').autocomplete({
minLength:2,
source: function(request, response) {
var usearch = request;
var upatt = new RegExp(/^f[0-9]/);
if (upatt.test(usearch)) {
var dataSource = "srv_search.php";
}
else {
var dataSource = "des_search.php";
}
$.get(dataSource, {term: request}, response);
}
});
Комментарии:
1. Почему бы не обрабатывать логическую серверную часть в контроллере, а не через javascript
2. Отличный вопрос. Я сделал, но результаты отображаются не так, как ожидалось. в FF и Chrom, в IE это сработало. Итак, я пытаюсь фильтровать со стороны клиента.
Ответ №1:
Использование source: someFn
Где
someFn = function(request, response) {
// request["term"] = Text entered by User
// Choose your data source based on it.
var dataSource = /* whatever */;
$.getJson(dataSource, request, response);
// or $.get(dataSource, request, response);
// basically response is to be used as callback
}
PS: Это непроверенный, просто написал быстрый код, чтобы подтолкнуть вас в правильном направлении. Дайте мне знать, если вам нужна дополнительная помощь.
Комментарии:
1. Спасибо, пожалуйста, обратите внимание, что я отредактировал свой первоначальный пост с помощью предложенного вами кода, и у меня это не сработало. Я, наверное, что-то пропустил… еще раз спасибо.
2. @DavidPeer, отредактировал оригинальный ответ, чтобы исправить … на самом деле запрос уже имеет формат
{term: "whatever"}
. Смотрите рабочий пример здесь — jsfiddle.net/qePj2 (используйте консоль браузера, чтобы увидеть выполняемый запрос)