【发布时间】:2014-08-17 07:55:51
【问题描述】:
我已经用 Twitter 的 Typeahead 插件拉头发了几个小时。
基本上,我们从响应格式为 .JSON 的 Web 服务(Asmx Web 服务)中提取数据。
一旦我们通过 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 ONCE 和 ONLY 获取基于查询的数据,但是当用户在输入框中键入更多字符时,它会多次通过过滤器。我相信这是问题所在。由于使用 Asmx webservice 的方法,我们必须使用一种 POST 类型,所以无论我们在输入框中输入多少字符,Ajax 似乎都无法发出多个请求。
正如我所说,这已经让我们发疯了好几天了,所以任何帮助都将不胜感激。
【问题讨论】:
标签: javascript jquery ajax json typeahead