我使用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>'
)
}
});
答案 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;
}