Javascript 更改自动完成时的过滤器,以允许对完整字符串进行排序

Javascript 更改自动完成时的过滤器,以允许对完整字符串进行排序,javascript,jquery,json,autocomplete,Javascript,Jquery,Json,Autocomplete,我有一个功能正常的自动完成jQuery输入控件,但有两件事我想修改 首先,它一次又一次地开火。我希望数据返回一次,缓存,不再调用 其次,我希望用户在控件中键入内容,并根据键入内容搜索整个字符串,而不仅仅是开始 这是我的功能脚本,它将数据返回到自动完成并工作 <script type="text/javascript"> $(function () { $('#datePicker').datepicker(); }); $(document).ready(function

我有一个功能正常的自动完成jQuery输入控件,但有两件事我想修改

首先,它一次又一次地开火。我希望数据返回一次,缓存,不再调用

其次,我希望用户在控件中键入内容,并根据键入内容搜索整个字符串,而不仅仅是开始

这是我的功能脚本,它将数据返回到自动完成并工作

<script type="text/javascript">

$(function () {
    $('#datePicker').datepicker();
});

$(document).ready(function() {

    $("#autocomplete").autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "FacilitiesAsync",
                type: 'GET',
                cache: true,
                data: 'sourceDb=myDb',
                dataType: 'json',
                success: function (json) {
                    // call autocomplete callback method with results 
                    response($.map(json, function (name) {
                        return {
                            label: name.label,
                            value: name.value
                        };
                    }));
                },
                error: function (xmlHttpRequest, textStatus, errorThrown) {
                    $("#autocomplete").text(textStatus + ', ' + errorThrown);
                }
            });
        },
        select: function (event, ui) {
            $('#autocomplete').val(ui.item.label);
            return false;
        },
        messages: {
            noResults: '',
            results: function () {
            }
        }
    });
});

</script>
我的输入控件看起来像这样

<input id="autocomplete" />      


我很感谢您的指导…

要缓存服务器上的数据,请设置一个单独的函数来处理(并缓存,如果需要)来自ajax调用的响应:

var cachedResult = null;
function fetchResponse(callback) {
    if (cachedResult) callback(cachedResult)
    $.ajax({
        url: "FacilitiesAsync",
        type: 'GET',
        cache: true,
        data: 'sourceDb=myDb',
        dataType: 'json',
        success: function (json) {
            // call autocomplete callback method with results 
            var cachedResult = $.map(json, function (name) {
                return {
                    label: name.label,
                    value: name.value
                };
            });
            callback(cachedResult);
        },
        error: function (xmlHttpRequest, textStatus, errorThrown) {
            $("#autocomplete").text(textStatus + ', ' + errorThrown);
        }
    });
}
$(document).ready(function() {

    $("#autocomplete").autocomplete({
        source: function (request, response) {
            fetchResponse(function(result) {
                response(result)
            })
        }
    });
});

至于定制匹配器,请查看示例中的文档。您的自定义匹配器仅在正则表达式模式中有所不同。还请注意,这一切都是在“源”回调中完成的。

您的代码与我的代码的工作原理相同。每次用户输入第三个字符试图退格以输入新的搜索条件时,都会进行调用。是否有一个设置,我可以更改使其缓存?显然,cache属性被设置为“true”,因此人们会认为这样做是可行的。
var cachedResult = null;
function fetchResponse(callback) {
    if (cachedResult) callback(cachedResult)
    $.ajax({
        url: "FacilitiesAsync",
        type: 'GET',
        cache: true,
        data: 'sourceDb=myDb',
        dataType: 'json',
        success: function (json) {
            // call autocomplete callback method with results 
            var cachedResult = $.map(json, function (name) {
                return {
                    label: name.label,
                    value: name.value
                };
            });
            callback(cachedResult);
        },
        error: function (xmlHttpRequest, textStatus, errorThrown) {
            $("#autocomplete").text(textStatus + ', ' + errorThrown);
        }
    });
}
$(document).ready(function() {

    $("#autocomplete").autocomplete({
        source: function (request, response) {
            fetchResponse(function(result) {
                response(result)
            })
        }
    });
});