1

jQuery 用のオートコンプリート プラグイン (これはhttp://docs.jquery.com/Plugins/Autocomplete )を使用しようとしています。私のサーバーは JSON 文字列を返しています。これは、次のように、AutoComplete プラグインの ' parse' および ' formatItem' パラメータを介してクライアントで処理しようとしています:

$(document).ready(function()
{
    $('.searchBox input.textbox').autocomplete('/DoSearch.aspx',
    {
        mustMatch: false,
        autoFill: true,
        minChars: 1,
        dataType: 'json',
        parse: function(data)
        {
            var array = new Array();
            for (var i = 0; i < data.length; i++)
            {
                array[array.length] = { data: data[i], value: data[i].ID, result: data[i].ID };
            }
            return array;
        },
        formatItem: function(row, i, n)
        {
            return row.ID + ': ' + row.Title;
        }
    });
});

これを実行すると、Firebug で「sValue.substring は関数ではありません」というエラーがスローされます。ただし、formatItem と parse 関数にブレークポイントを設定すると、期待どおりにヒットし、有効なデータが含まれているようです。

以下は、サーバーから返された JSON テキストの正確なコピー & ペーストです。

[{"ID":140177,"Title":"Food Handling","Code":"J01.576.423.200"},{"ID":140178,"Title":"Food Handling","Code":"J01.576.423.200"},{"ID":140179,"Title":"Brain Infarction","Code":"C10.228.140.300.301.200"},{"ID":140180,"Title":"Cerebral Hemorrhage","Code":"C10.228.140.300.535.200"},{"ID":140182,"Title":"Insulin","Code":"D06.472.610.575"},{"ID":140183,"Title":"Insulin","Code":"D06.472.610.575"},{"ID":140184,"Title":"Insulin","Code":"D06.472.610.575"},{"ID":140186,"Title":"Insulin","Code":"D06.472.610.575"},{"ID":140188,"Title":"Insulin","Code":"D06.472.610.575"},{"ID":140189,"Title":"Sulfonylurea Compounds","Code":"D02.886.590.795"}]

助けてください。私はすでに Google と StackOverflow で助けを求めていますが、このエラーを抱えている人は他に見つかりません。乾杯!

4

1 に答える 1

2

くそー!!!

問題の原因を見つけました。これは、JSON文字列のID値が文字列ではなく整数として入力されたためです。たとえば、オートコンプリートでは{"ID":140177,なく、{"ID":"140177",すべてが文字列になると想定しています。

サーバー上のID値を引用符で囲むか、次のように「解析」関数でクライアント側の文字列に変換することで、問題を修正しました。value: data[i].ID + '', result: data[i].ID + ''

于 2010-04-05T10:19:19.720 に答える