0

非常に大きなデータには先行入力を使用する必要があります。データの生成には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
        });
    })

エラーは発生しませんが、先行入力テキストボックスに書き込もうとすると、次のエラーが発生します。

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)

input#typeahead-packages(type="text",data-provide="typeahead")

また、Chromeコンソールで私は試しました:

 $("#typeahead-packages").typeahead({source:["abcdef","abcddd","abcccc"]});

ただし、先行入力ではエラーは発生しませんが、機能しません。何が間違っているのかわかりません。2.0.4ブートストラップを使用しています。

編集:私はそれをgetJSONに変更しましたが、それは役に立ちませんでした。ただし、このようなデータを作成すると、次のように機能します。

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

1 に答える 1

0

更新に基づいて、問題はJSONに起因します。

jQuery.getJSON()

重要:jQuery 1.4以降、JSONファイルに構文エラーが含まれている場合、リクエストは通常​​サイレントに失敗します。(ソース

アイテムのソースに集中する必要があります。これが文字列の配列であることを確認してください。エラーdataの提案は文字列です。

[ネットワーク]タブでChromeコンソール(または任意の選択)を使用して、AJAXリクエストの実際の結果をスパイできます。JSONLintは、結果を検証するための興味深いツールです。

次に、次の問題は、すでに初期化されている先行入力のソースを更新することです。次のコードを使用できます。

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

例(jsfiddle)

于 2012-07-05T17:23:03.813 に答える