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文字後にキーを押すたびに、サーバーから取得リクエストが行われます。そしてしばらくすると、すべてのリクエストが保留状態になり、それらの並列リクエストはサーバーが応答するための深刻な負荷になります。並列リクエストを配置する方法、またはリクエストを行う前に一定の時間間隔を待つ方法はありますか?

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 に答える