Javascript 使用静态数据的Twitter引导Typeahead

Javascript 使用静态数据的Twitter引导Typeahead,javascript,ajax,twitter-bootstrap,typeahead,Javascript,Ajax,Twitter Bootstrap,Typeahead,我需要对非常大的数据使用typeahead。生成数据需要4-5秒。所以我不能每次都调用Ajax。我根据用户请求下载并缓存数据。我的代码如下: $("#build-package-list-btn").click(function(){ $.get**JSON**("/packages", function(data){ // data is an array $("#typeahead-packages").typeahead({s

我需要对非常大的数据使用typeahead。生成数据需要4-5秒。所以我不能每次都调用Ajax。我根据用户请求下载并缓存数据。我的代码如下:

$("#build-package-list-btn").click(function(){
        $.get**JSON**("/packages", function(data){
            // data is an array
            $("#typeahead-packages").typeahead({source:data});
            console.log(data == null); // returns false
        });
    })
它没有给出错误,但每当我尝试写入typeahead文本框时,它都会给出以下错误:

Uncaught TypeError: Cannot call method 'toLowerCase' of null bootstrap.js:1644
Typeahead.matcher bootstrap.js:1644
(anonymous function) bootstrap.js:1631
e.extend.grep jquery-1.7.2.min.js:2
Typeahead.lookup bootstrap.js:1630
Typeahead.keyup bootstrap.js:1738
e.extend.proxy.g jquery-1.7.2.min.js:2
f.event.dispatch jquery-1.7.2.min.js:3
f.event.add.h.handle.i jquery-1.7.2.min.js:3
我前面的字体是这样的(JADE)

我还在Chrome控制台中尝试:

 $("#typeahead-packages").typeahead({source:["abcdef","abcddd","abcccc"]});
但typeahead不会给出错误,但也不起作用。我找不到我做错了什么。我正在使用2.0.4引导

编辑:我将它从get改为getJSON,但它没有帮助。但是,当我构建这样的数据时,它是有效的:

data = [new String((data[0])), new String((data[5]))];

根据您的更新,问题来自JSON

jQuery.getJSON() 重要提示:从jQuery1.4开始,如果JSON文件包含语法错误,请求通常会自动失败。 ()

你应该专注于物品的来源。确保这是一个字符串数组。您的错误提示数据是一个字符串

您可以在网络选项卡下使用Chrome控制台(或您选择的任何控制台),监视AJAX请求的实际结果。是验证结果的有趣工具

然后,您的下一个问题将是更新已经初始化的typeahead的源。您可以使用以下代码:

var$myTypeahead=$(“#myTypeahead”);
var typeaheadObj=$myTypeahead.data('typeahead');
if(typeaheadObj)typeaheadObj.source=[“abc”,“cde”];

您没有检查
数据
,因此它很可能是字符串、对象或任何东西。此外,调试测试可能无法工作,因为您只能初始化插件一次。你能提供实际的数据吗?数据只是一个字符串数组,我也尝试过提供一些可控的任意数据。我现在看到错误@Sherbrow,你不能重复两次,奇怪。
data = [new String((data[0])), new String((data[5]))];