Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带远程数据源的Typeahead.js_Javascript_Jquery_Typeahead.js_Typeahead_Twitter Typeahead - Fatal编程技术网

Javascript 带远程数据源的Typeahead.js

Javascript 带远程数据源的Typeahead.js,javascript,jquery,typeahead.js,typeahead,twitter-typeahead,Javascript,Jquery,Typeahead.js,Typeahead,Twitter Typeahead,我有一个json文件,可以输出 {"data": ["A", "B", "C", "D", ...]} 我的typeahead.js脚本如下所示 var engine = new Bloodhound({ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'), queryTokenizer: Bloodhound.tokenizers.whitespace, prefetch: { ur

我有一个json文件,可以输出

{"data": ["A", "B", "C", "D", ...]}
我的typeahead.js脚本如下所示

var engine = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: {
        url: 'list.json',
        filter: function(list) {
            return $.map(list, function(person) { return { name: person }; });
        }
    }
});

engine.initialize();

$('.typeahead').typeahead(null, {
    displayKey: 'name',
    source: engine.ttAdapter()
});
typeahead.js脚本已正确激活,但它仅将数据源解释为一个逗号分隔的项,而不是单独的项。因此,它没有“搜索”A、B、C等元素,而是给了我一个建议A、B、C

我的剧本怎么了?我已经在第二次会议上学习了这些例子


如果我在datumTokenizer、filter和displayKey中将name都更改为value,它将不会得到任何项,而只会得到未定义的输出。我很确定预取中的过滤器选项不能正常工作。

在过滤器函数中,您正在迭代对象的属性:

{"data": ["A", "B", "C", "D", ...]}
在本例中,您仅对数据进行迭代。 对于迭代数据中的项,应该传递 列表.数据 到过滤器函数。这样:

var engine = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: {
        url: 'list.json',
        filter: function(list) {
            return $.map(list.data, function(person) { return { name: person }; });
        }
    }
});
答案给出了一个遥远的例子,可能会对你有所帮助。