Я рвал на себе волосы несколько часов с плагином Twitter Typeahead.
По сути, мы извлекаем данные из веб-службы (веб-службы Asmx) с форматом ответа .JSON.
Как только мы получаем его через BloodHound, мы конвертируем его в строку, удаляем некоторые дополнительные символы перед повторным преобразованием в Json и затем передаем в Typeahead.
var engine= new Bloodhound({
datumTokenizer: function (d) {
return Bloodhound.tokenizers.whitespace("value")
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch : {
ttl : 1000,
url : '/webservice.asmx'
},
remote: {
ttl : 1000,
url: '/webservice.asmx',
ajax: {
beforeSend: function (jqXhr, settings) {
jqXhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
settings.data = '{"query":"' + $('#inputText').val() + '"}';
alert(settings.data);
},
type: "POST",
context: this
},
filter: function (response) {
//return response;
if (response.hasOwnProperty('d')) {
var returned = String(response.d);
returned = returned.slice(14,-1);
var parsedJSON = jQuery.parseJSON(returned);
return parsedJSON ;
}
else {
return response;
}
}
}
});
engine.initialize();
$('#inputText').typeahead(null, {
source: engine.ttAdapter()
});
При вводе в поле ввода код извлекает данные на основе запроса через Ajax ОДИН РАЗ и ОДИН РАЗ, однако он пропускает их через фильтр несколько раз, когда пользователь вводит больше символов в поле ввода. Я считаю, что это проблема. Поскольку мы должны использовать тип POST из-за метода использования веб-службы Asmx, Ajax, похоже, не может сделать более одного запроса, независимо от того, сколько символов мы вводим в поле ввода.
Как я уже сказал, это сводит нас с ума уже несколько дней, поэтому любая помощь будет невероятно признательна.