2

JSON 形式の結果を返す web メソッドへの先行入力リモート ソースを作成しようとしています。

Ajax は成功を収めており、結果を適切に返しています。以下のコードのコンソールは以下のように出力されます

[{"Id":"1","Value":"Midhun"},{"Id":"2","Value":"Midhun2"}]

しかし、先行入力の提案はすべて未定義です

var typeHeadEngine = new Bloodhound({ name: 'Name', remote: { url: 'page.aspx/method',

        ajax: {
            type: "POST",
            data: JSON.stringify({ "query": '%QUERY' }),
            contentType: "application/json; charset=utf-8",
            dataType: "text",                
            success: function (data) {
                var obj = JSON.parse(data);
                console.log(obj.d);
                return obj.d;
            }

        }

    },
    datumTokenizer: function (d) {
        return Bloodhound.tokenizers.whitespace(d.val);
    },
    queryTokenizer: Bloodhound.tokenizers.whitespace
});

typeHeadEngine .initialize();

$('.typeahead').typeahead({
    hint: true,
    highlight: true,
    minLength: 3
},   {
  name: 'Name',
  displayKey: 'Value',
  source: typeHeadEngine.ttAdapter()

});

Web メソッドは、ajax 成功関数で配列に変換している JSON 文字列を返しています。グーグル中に、先行入力には JSON オブジェクトではなく配列が必要であることがわかったので、配列に変換しています。

私はそれを理解するために多くの同様の質問をしました。しかし、私はそうすることができません。
誰かが私がここで間違っていることを理解するのを手伝ってもらえますか?

4

1 に答える 1

1

successJSON を変換するために ajax オプションのフィールドを使用しないでください。代わりにfilter、Bloodhound が提供するフィールドを使用する必要があります。

var typeHeadEngine = new Bloodhound({
name: 'Name',
remote: {
    url: 'page.aspx/method',
    ajax: {
        type: "POST",
        data: JSON.stringify({
            "query": '%QUERY'
        }),
        contentType: "application/json; charset=utf-8",
        dataType: "text"
    },
    filter: function (data) {
        var obj = JSON.parse(data);
        console.log(obj.d);
        return obj.d;
    }
},
datumTokenizer: function (d) {
    return Bloodhound.tokenizers.whitespace(d.val);
},
queryTokenizer: Bloodhound.tokenizers.whitespace
});
于 2014-08-15T12:33:29.763 に答える