TypeAhead不显示查询结果

时间:2016-08-03 12:51:44

标签: javascript php html mysql bootstrap-typeahead

我非常绝望!

我有Bootstrap Typeahead的这个问题。

HTML标记:

plotly_plot <- plot_ly(iris, x = Petal.Length, y = Petal.Width,
      color = Sepal.Length>6, colors = c("#132B43", "#56B1F7"),
      mode = "markers")

suppressWarnings(print(plotly_plot))

JavaScript的:

<div class="form-group">
    <label for="">Recipients</label>
    <input id="recipients" name="recipients" 
        autocomplete="off" 
        class="form-control" 
        data-role="tagsinput">
</div>

在Ajax调用之后,我在consolle中得到了这个数组:

$('#recipientsContainer').tagsinput({
            allowDuplicates: false,
            trimValue: true,
            confirmKeys: [13, 44],
            typeahead: {
                hint: true,
                highlight: true,
                minLength: 4,
                limit: 10,
                source: function (query) {
                    $.ajax({
                        url: "/app/route",
                        type: 'POST',
                        dataType: 'JSON',
                        data: {'query' : query},
                        success: function(data) {
                            console.log(data);
                            return(data);
                        }
                    });
                },
                afterSelect: function() {
                    this.$element[0].value = '';
                }
            }
        });

问题是:我什么也看不见:(没有任何东西出现.typeahead不起作用。

在控制台中,我收到此错误

["Justin Demetria +393281893574", "Dylan Alea +393700488191", "Zahir Tatyana +393007841301", "Ryan Veda +393542236060", "Hunter Wanda +393393156943"]

我该如何解决?

我正在使用Bootstrap 3,最后一个Typeahead js源。

2 个答案:

答案 0 :(得分:1)

詹姆斯,现在我的ajax电话是:

$('#recipientsContainer').tagsinput({
            allowDuplicates: false,
            trimValue: true,
            confirmKeys: [13, 44],
            typeahead: {
                source: function(queryForHints) {
                    if (queryForHints.length < 4)
                        return '';
                    var parameters = {'queryForHints': queryForHints};
                    jQuery.ajax({
                        url: "/app/route",
                        data: parameters,
                        type: "POST",
                        dataType: "json",
                        success: function(data) {
                            var sourceData = [];
                            for (var i = 0; i < data.length; i++) {
                                sourceData.push(data[i].text);
                            }
                            return (sourceData);
                        },
                        error: function(data) {
                            console.log("error for xxxxx/xxxxx");
                        },
                        async: true
                    });
                }
            }
        });

但错误仍然存​​在:

bootstrap-tagsinput.js:331 Uncaught TypeError: Cannot read property 'success' of undefined

错误发生在bootstrap-tagsinput.js第331行,我发现:

if ($.isFunction(data.success)) {
              // support for Angular callbacks
              data.success(processItems);

我们可以解决这个问题吗?

在我看来,问题是输入 - 标签无法理解ajax调用的成功

答案 1 :(得分:0)

对于预先输入使用Bloodhound来获取数据而不是ajax。

您的代码应如下所示:

var customers = new Bloodhound({
            datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
            queryTokenizer: Bloodhound.tokenizers.whitespace,
            remote: {
                url: '/api/customers?query=%QUERY',
                wildcard: '%QUERY'
            }
        });

        $('#customer').typeahead({
            minLength: 3,
            highlight: true
        }, {
            name: 'customers',
            display: 'name',
            source: customers
        }).on("typeahead:select", function(e, customer) {
            vm.customerId = customer.id;
        });

有关猎犬的更多信息: Bloodhound@github

这里有一些关于typeahead的例子:TypeAhead Examples