Typeahead 0.10防止缓存

时间:2014-02-18 14:12:10

标签: typeahead typeahead.js twitter-typeahead

我使用twitter的typeahead 0.10和远程网址从服务器检索JSON结果。

我想阻止客户端缓存,以便始终在搜索上进行搜索 服务器。我怎样才能做到这一点?

请参阅下面的代码:

 // instantiate the bloodhound suggestion engine
    var dataSource = new Bloodhound({
        datumTokenizer: function (d) {
            return Bloodhound.tokenizers.whitespace(d.value);
        },
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote: {
            url: "../" + autocompleteInfo.ControllerName + "/" + autocompleteInfo.MethodName + "?term=%QUERY&ts=" + (new Date().getTime()),
            filter: function (res) {
                var data = [];
                data = $.map(res, function (item) {
                    return { label: item.Name, id: item.Id, autocompleteInfo: autocompleteInfo, cssClass: item.Class };
                });

                return data;
            }
        },
        limit: 15,
        name: 'typeaheadSourceCache',
        ttl: 0,
        ajax: {
            cache: false
        }
    });

    dataSource.initialize();

    $("#" + autocompleteInfo.AutocompleteId).typeahead({
        minLength: 3,
        highlight: true,
        autoselect: true
    },
        { 
            displayKey: 'label',
            source: dataSource.ttAdapter(),
            templates: {
                suggestion: Handlebars.compile(
                '<div class="searchItem {{cssClass}}">{{label}}</div>'
                )
            }
        });

4 个答案:

答案 0 :(得分:27)

只需将cache字段添加到remote对象:

remote: { 'cache': false ... }

答案 1 :(得分:4)

查看版本10.0.2。现在有一种通过Bloodhound.js清除缓存的方法(与Typeahead.js一起使用):

<强> engine.clearRemoteCache();

以下是来自twitter typeahead的文档: https://github.com/twitter/typeahead.js/blob/master/doc/bloodhound.md#bloodhoundclearremotecache

答案 2 :(得分:0)

尝试使用typeahead destroy utils,我认为在你的情况下是:

$("#" + autocompleteInfo.AutocompleteId).typeahead('destroy');

你重新启动$(“#”+ autocompleteInfo.AutocompleteId)

答案 3 :(得分:0)

为了解决我遇到的IE问题:

remote: {
url: '/myurl?par=%QUERY',
wildcard: '%QUERY',
prepare: function (q, o) {
        o.url = o.url.replace('%QUERY', encodeURIComponent(q));
        o.cache = false;
        return o;
    }
}

prefetch: {
    url: '/myurl2',
    ttl: 300000, //5min
    thumbprint: userName,
    prepare: function(o) {
        o.cache = false;
        return o;
}