1

ユーザー名とID番号を返す単純なCFCがあります。CFC は機能し、ブラウザで JavaScript の結果を返すことがテストされています。問題ない。これは出力です:

{
   "COLUMNS":["USERNAME","ID"]
   ,"DATA":[ ["jclark","001650472"]
             ,["jclark1","0000869‌​49"]
             ,["jclarke","002386440"]
           ]
}

Twitter Typeahead で使用しようとすると、結果が返されません。firebug では、CFC/JS からの正常な応答を確認できますが、それが発生するとエラー JS エラーが発生します。

return this.name.toLowerCase();
This.name is undefined

データが CFC から正しく返されていないようです。

これが私のjs/htmlです

<script>
$(document).ready(function () {
    $('#add_user').typeahead({
        source: function (query, process) {
            var $url = "/glv/_includes/gl_data.cfc?method=search_accounts_by_username&returnformat=json&username=" + query;
            var $datas = new Array;
            $datas = [""];
            $.ajax({
                url: $url,
                dataType: "json",
                type: "GET",
                success: function (data) {
                    $.map(data, function (data) {
                        var group;
                        group = {
                            id: data.ID,
                            name: data.USERNAME,
                            toString: function () {
                                return JSON.stringify(this);
                                //return this.variable;
                            },
                            toLowerCase: function () {
                                return this.name.toLowerCase();
                            },
                            indexOf: function (string) {
                                return String.prototype.indexOf.apply(this.name, arguments);
                            },
                            replace: function (string) {
                                var value = '';
                                value += this.name;
                                if (typeof (this.name) != 'undefined') {
                                    value += ' <span class="pull-right muted">';
                                    //value += this.name;
                                    value += '</span>';
                                }
                                return String.prototype.replace.apply('<div style="padding: 10px; font-size: 1em;">' + value + '</div>', arguments);
                            }
                        };
                        $datas.push(group);
                    });
                    process($datas);
                }
            });
        },
        property: 'username',
        items: 10,
        minLength: 2,
        updater: function (item) {
            var item = JSON.parse(item);
            $('#id').val(item.id);
            $('#add_user').val(item.name);
            return item.name;
        }
    });

});
</script>

<div class="span9">
    <h1>Administration</h1>
    <hr>
    <h3>Add New User</h3>
    <div class='search'>
        <form class="form-search">
        <input type="text" class="input-medium search-query" placeholder="Username" data-provide="typeahead" id="add_user" name="add_user" autocomplete="off">
        <button type="submit" class="btn">Search</button>
        </form>
    </div>
</div>
4

2 に答える 2