如何在twitter typeahead上使用json

时间:2015-03-11 19:07:38

标签: javascript jquery json typeahead.js

我有一个像这样的json:

{"num": ["test", "test group event"]}

我想使用typeahead.js, 但他们的json是这样的:

["Andorra","United Arab Emirates"]

如何在下面的例子中使用我的json?

<script type='text/javascript'>//<![CDATA[ 
    $(window).load(function(){
        var countries = new Bloodhound({
            datumTokenizer : Bloodhound.tokenizers.obj.whitespace('name'),
            queryTokenizer : Bloodhound.tokenizers.whitespace,
            limit : 10,
            prefetch : {
                url    : 'http://127.0.0.1:8000/mysearch/',
                filter : function(list) {
                    return $.map(list, function(country){ 
                        return { 
                            name : country 
                        };
                    });
                }
            }
        });
        countries.initialize();
        $('#prefetch .typeahead').typeahead(null, {
            name : 'countries',
            displayKey : 'name',
            source : countries.ttAdapter()
        });
    });//]]>  
</script>

更新

我的json来自服务器(http://rroyales.webfactional.com/mysearch/1.json),所以如果可能,我认为我们必须使用预取来从服务器获取json。我不想使用getjson在变量中捕获它,或者是否有更简单的方法在变量中捕获它?

更新2:

what is wrong with my json coming from haystack - 创建了一个与此相关的新问题

2 个答案:

答案 0 :(得分:1)

更新

这就是你的猎犬应该是这样的样子

var dataSource = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('item'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: {
        url: "http://jsbin.com/nixalofara/1.json",
        filter: function (data) {
            return $.map(data['num'], function (item) {
                return {
                    item: item
                };
            });
        }
    }
});

并且像这样输入

$('.typeahead').typeahead({
    highlight: true
}, {
    displayKey: 'item',
    source: dataSource.ttAdapter()
});

这是demo


<德尔> `var data = {&#34; num&#34;:[&#34; one&#34;,&#34; two&#34;]};` 这就是你的猎犬应该如何看待上面的数据     var bloodhound = new Bloodhound({       datumTokenizer:Bloodhound.tokenizers.obj.whitespace(&#39; value&#39;),       queryTokenizer:Bloodhound.tokenizers.whitespace,       local:$ .map(data [&#39; num&#39;],function(item){return {value:item};})     }); 并且像这样打字     $(&#39; .typeahead&#39)。预输入({       突出:真实       },{       来源:bloodhound.ttAdapter()     }); 希望这可以帮助。

答案 1 :(得分:0)

由于您的数组是较大json对象中的属性,因此我非常确定您可以执行以下操作:

var myJson = {"num": ["one", "two"]}; //capture your json object in a variable
var myArray = myJson.num; //myArray will now equal ["one", "two"]

然后,在您列出的代码底部附近,您需要相应地更新typeahead电话。