0

我有以下预输入功能

$('.search-input').typeahead({
minLength: 3,
source: function (query, process) {
    return $.getJSON(
        '/search/search_autocomplete/',
        {query: query},
        function (data) {
            var newData = [];
            $.each(data,function(){
                newData.push(this.destination + "  (" + this.country + ")");
            });
            return process(newData)
        })

}

});

但是每次当我在 3 个字符后按下一个键时,它都会从服务器发出一个 get 请求。一段时间后,所有的请求都停留在等待状态,这些并行请求成为服务器响应的严重负载。有没有办法安排并行请求或在发出请求之前等待一段时间。

4

1 回答 1

1

尝试这样的事情:

var running = 0;

$('.search-input').typeahead({
minLength: 3,
source: function (query, process) {
    if(running) return;
    running = 1; 

    return $.getJSON(
        '/search/search_autocomplete/',
        {query: query},
        function (data) {
            var newData = [];
            $.each(data,function(){
                newData.push(this.destination + "  (" + this.country + ")");
            });
            return process(newData)
        }).always(running=0);

}

您也可以在alway() 函数中尝试超时:setInterval(function(){running=0},500);

于 2013-06-24T13:39:22.810 回答