Javascript 在Twitter typeahead.js中取消挂起的猎犬请求
我的twitter typeahead.js设置如下:Javascript 在Twitter typeahead.js中取消挂起的猎犬请求,javascript,twitter,typeahead.js,bloodhound,Javascript,Twitter,Typeahead.js,Bloodhound,我的twitter typeahead.js设置如下: var filteredSource = new Bloodhound({ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'), queryTokenizer: Bloodhound.tokenizers.whitespace, remote: { url: '@Url.Action("Get", "Search")/',
var filteredSource = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '@Url.Action("Get", "Search")/',
prepare: function (query, settings) {
settings.url = settings.url + $('#filter-select').val() + '?q=' + encodeURIComponent(query);
return settings;
},
rateLimitBy: 'throttle',
rateLimitWait: 800
}
});
$('#search').typeahead({
hint: false,
highlight: true,
minLength: 3
}, {
name: 'filtered-source',
display: 'value',
limit: 50,
source: filteredSource,
templates: {
empty: [
'<div>',
' Unable to find any results.',
'</div>'
].join('\n'),
suggestion: Handlebars.compile(templateData)
}
});
var lastSearch;
var filteredSource = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '@Url.Action("Get", "Search")/',
prepare: function (query, settings) {
settings.url = settings.url + $('#filter-select').val() + '?q=' + encodeURIComponent(query);
settings.beforeSend = function(e) {
if (lastSearch) {
lastSearch.abort();
}
lastSearch = e;
};
return settings;
},
rateLimitBy: 'throttle',
rateLimitWait: 800
}
});
当用户进行搜索并开始键入key之类的内容并暂停时,猎犬会向服务器发送搜索请求。然后,当用户将字母添加到输入字段时,另一个搜索将发送到服务器,例如关键字
但挂起的请求密钥首先等待浏览器完成,然后服务器处理第二个请求,只有在完成后,才会显示结果
因此,用户可能需要很长时间才能看到任何结果
当关键字被更改时,有没有办法通过猎犬来取消挂起的请求?您可以像这样使用中止功能:
var filteredSource = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '@Url.Action("Get", "Search")/',
prepare: function (query, settings) {
settings.url = settings.url + $('#filter-select').val() + '?q=' + encodeURIComponent(query);
return settings;
},
rateLimitBy: 'throttle',
rateLimitWait: 800
}
});
$('#search').typeahead({
hint: false,
highlight: true,
minLength: 3
}, {
name: 'filtered-source',
display: 'value',
limit: 50,
source: filteredSource,
templates: {
empty: [
'<div>',
' Unable to find any results.',
'</div>'
].join('\n'),
suggestion: Handlebars.compile(templateData)
}
});
var lastSearch;
var filteredSource = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '@Url.Action("Get", "Search")/',
prepare: function (query, settings) {
settings.url = settings.url + $('#filter-select').val() + '?q=' + encodeURIComponent(query);
settings.beforeSend = function(e) {
if (lastSearch) {
lastSearch.abort();
}
lastSearch = e;
};
return settings;
},
rateLimitBy: 'throttle',
rateLimitWait: 800
}
});
这将取消最后一个完成的AJAX请求,但需要注意的是,abort函数并不总是阻止请求到达服务器。如果请求在调用abort之前到达服务器,服务器可能会继续处理该请求。谢谢,这对我很有帮助。出于我的目的,我必须在settings.url中添加一个缓存破坏参数,这样猎犬就不会取消传输。