Javascript Twitter typeahead-%正在作为远程查询的字符串传递的查询
我已经在这里看了很多(以及)但我似乎找不到一个类似于我自己的问题 我在这里可能有点粗-我的%查询字符串是作为远程查询的一部分传递的,这显然是我不想要的。 例如:Javascript Twitter typeahead-%正在作为远程查询的字符串传递的查询,javascript,typeahead.js,Javascript,Typeahead.js,我已经在这里看了很多(以及)但我似乎找不到一个类似于我自己的问题 我在这里可能有点粗-我的%查询字符串是作为远程查询的一部分传递的,这显然是我不想要的。 例如: "NetworkError: 404 NOT FOUND - http://local.example.co:8000/search-schools/%QUERY"` 这是我的JS(正如你所看到的,我在一个页面上有多个输入框,每个输入框位于单独的bootstrap3选项卡上(这将是另一个问题的焦点): var schoolSourc
"NetworkError: 404 NOT FOUND - http://local.example.co:8000/search-schools/%QUERY"`
这是我的JS(正如你所看到的,我在一个页面上有多个输入框,每个输入框位于单独的bootstrap3选项卡上(这将是另一个问题的焦点):
var schoolSource=新猎犬({
提示:错,
datumTokenizer:Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer:猎犬,标记,空白,
远程:{
url:“/search schools/%QUERY”
}
});
schoolSource.initialize();
$(“#schoolSearch1”).typeahead(null{
名称:'schoolSearch1',
displayKey:'名称',
资料来源:学校资料来源
});
$(“#schoolSearch2”).typeahead(null{
名称:'schoolSearch2',
displayKey:'名称',
资料来源:学校资料来源
});
行为:
我可以看到,当我在输入框中输入搜索文本时,尝试与远程URL通信,但是它传递的是文本%查询字符串,而不是输入框中的内容
我做错了什么?如何将查询字符串传递给侦探犬?根据OP链接中的示例,您可能应该在远程配置中包含
通配符属性。请尝试:
var schoolSource = new Bloodhound({
hint: false,
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/search-schools/%QUERY',
wildcard: '%QUERY'
}
}
一个简单的解决方案,尽管我仍然不明白为什么需要包含此参数。只需更改:
<script type="text/javascript">
var schoolSource = new Bloodhound({
hint: false,
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/search-schools/%QUERY'
}
});
schoolSource.initialize();
</script>
var schoolSource=新猎犬({
提示:错,
datumTokenizer:Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer:猎犬,标记,空白,
远程:{
url:“/search schools/%QUERY”
}
});
schoolSource.initialize();
为此(请注意remote中的其他条目):
var schoolSource=新猎犬({
提示:错,
datumTokenizer:Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer:猎犬,标记,空白,
远程:{
url:“{%url”schoolSearchJSONResponseEmpty“%}%QUERY”,
通配符:'%QUERY'
}
});
schoolSource.initialize();
谢谢你,阿米特,我想我们是同时键入答案的。我会将你的回答标记为答案。在你的回答中,你说你仍然不明白这一点。好吧,这只是API的定义方式。没有定义“默认”通配符,所以你需要指定值。
<script type="text/javascript">
var schoolSource = new Bloodhound({
hint: false,
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/search-schools/%QUERY'
}
});
schoolSource.initialize();
</script>
<script type="text/javascript">
var schoolSource = new Bloodhound({
hint: false,
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '{% url 'schoolSearchJSONResponseEmpty' %}%QUERY',
wildcard: '%QUERY'
}
});
schoolSource.initialize();
</script>