Функциональность предварительной выборки с опережением ввода в Bootstrap

Поэтому я использую API-интерфейс Bootstrap для создания живого поиска.

Параметр source хорош тем, что позволяет использовать вызов AJAX для получения данных с сервера. Однако я хотел бы иметь возможность «предварительно выбирать» источник при загрузке страницы и выполнять вызов ajax только в том случае, если в «предварительно выбранных» данных нет совпадений.

Как я мог сделать это возможным? Мой вызов ajax здесь:

    $("#topsearchbar").typeahead({
        items: 8,
        source: function (query, process) {
            $.get( "/topsearchbar", {"data":query}, function(data) {
                process( data );
            });
        }
    });

person Pash Shocky    schedule 23.07.2013    source источник


Ответы (2)


Итак, что вы на самом деле хотите, так это кэшировать уже извлеченные данные.

var query_data = {};
$("#topsearchbar").typeahead({
    items: 8,
    source: function (query, process) {
        if (query_data[query] === undefined) {
            $.get( "/topsearchbar", {"data":query}, function(data) {
                query_data[query] = data;
                process( data );
            });
        } else {
            process(query_data[query]);
        }
    }
});
person Rafał Łużyński    schedule 23.07.2013
comment
Это не совсем то, что я хотел, я действительно хотел предварительно получить данные, но сделать это с помощью запроса ajax. Я решил это, смотрите мой ответ, если вам интересно :) - person Pash Shocky; 23.07.2013
comment
Пс. Спасибо за совет использовать объекты в этом случае - person Pash Shocky; 23.07.2013

Ну вот как я это сделал в итоге:

var Obj = {};
var Arr = [];
var preFetchResult = function (query, callback) {
    $.get( "/request", {"data":query}, function(data) {
        Obj = {};
        Arr = [];
        for (var i = 0; i < data.length; i++) {
            Arr.push( data[i].name );
            Obj[ data[i].id ] = data[i].name;
        }
        callback(Obj,Arr);
    });
};

$(window).load(function() {
    preFetchResult("", function(obj,arr) { // Empty query prefetches all db data
        $("#bar").typeahead({
            items: 8,
            source: function (query, process) {
                process(arr);
                $.get("/request", {"data":query}, function(data) {
                    for (var i = 0; i < data.results.length; i++) {
                        if (obj[data.results[i].id] === undefined) {
                            obj[data.results[i].id] = data.results[i].name;
                            arr.push(data.results[i].name);
                        }
                    }
                    process(arr);
                });
            }
        });
    });
});
person Pash Shocky    schedule 23.07.2013