即使查询返回结果,Twitter-typeahead 也不显示任何结果

Posted

技术标签:

【中文标题】即使查询返回结果,Twitter-typeahead 也不显示任何结果【英文标题】:Twitter-typeahead shows no results even if the query returns results 【发布时间】:2019-11-11 05:18:29 【问题描述】:

经过一番研究,我无法解决我的问题。我正在使用 twitter-typeahead,它没有显示结果,但是当我检查网络中的响应时,它会显示结果。即使查询中有结果,我的预输入也不显示结果的原因可能是什么。

HTML

<input class="form-control typeahead" type="text" name="variant"
                                    placeholder="Search by BRNO,variant ..." />

JavaScript

$(document).ready(function()

    var Variants = new Bloodhound(
        datumTokenizer: Bloodhound.tokenizers.whitespace,
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote: 
            url: '/sales/br-number/search?query=%QUERY%',
            wildcard: '%QUERY%',
            cache: false,
        ,
    );

    $('.typeahead').typeahead(null, 
        hint: true,
        highlight: true,
        source: Variants,
        display: function(data) 
            return data.br_no+' '+data.variants_name.toUpperCase()+' '+data.case_bottles.quantities;
        ,
        templates: 
            empty: [
            '<div class="empty-message">',
                'No Results',
            '</div>'
            ].join('\n'),
            suggestion: function(data) 
                return '<p><strong>' + data.br_no + '</strong> '+ data.variants_name +' <strong>' + data.case_bottles.quantities + '</strong> </p>';
            
        
    );

);

控制器

public function br_number_search(Request $request)

    $query = $request['query'];

    return $variants = Variant::with('case_bottles', 'product')
        ->where('br_no', 'LIKE', "%$query%")
        ->get();

回复截图:

有人可以提出解决方案吗?

【问题讨论】:

嗯,分配 $query 后转储它会得到什么? 实际上,当我查看网络响应​​时,它的工作原理.. 我的意思是结果即将到来,但由于某种原因,无论发生什么,提前输入都没有显示任何结果 你能发布一个你得到的 api 响应吗? 我已经上传了回复的截图 如果出现 javascript 错误,您是否检查过控制台? 【参考方案1】:

如果网络正在返回某些内容,则可能很简单,因为您没有以视图所需的格式返回数据。 IE 如果这是返回视图的一部分,您可能希望将整个流作为 Laravel 视图发送:

$variants = Variant::with('case_bottles', 'product')
    ->where('br_no', 'LIKE', "%$query%")
    ->get();

return view('something', compact('variants'));

由于这是通过异步拉取返回的,我认为您可能只需要对其进行字符串化或对数据进行 json_encode 以便正确传输。也许在获得$variants 之后,类似:

return json_encode($variants));

然后记得在必要时在你的 typeahead 函数中进行解码。

【讨论】:

我会试试这个方法【参考方案2】:

统计你的评论

实际上,当我查看网络响应​​时,它的工作原理

这个问题不适合“laravel”和“雄辩”的标签。 它更接近标记“javascript”,当然标记“jquery”因为 typeahead.js 是 jQuery 插件

您的查询

return $variants = Variant::with('case_bottles', 'product') ->where('br_no', 'LIKE', "%$query%") ->get();

返回集合对象,但是JS代码

display: function(data) return data.br_no+' '+data.variants_name.toUpperCase()+' '+data.case_bottles.quantities;

看起来还没有为提到的数据类型做好准备。

所以,请仔细阅读@watercayman 的 2 条建议并将它们一起使用

1) return json_encode($variants));

2)

记得在你的 typeahead 函数中解码(json 数据)

【讨论】:

网络响应非常好。使用 ajax 调用,响应会从 Laravel 以 json 形式返回。显示功能也很好并且与响应相匹配。我使用它的方式完全相同。

以上是关于即使查询返回结果,Twitter-typeahead 也不显示任何结果的主要内容,如果未能解决你的问题,请参考以下文章

即使查询相同,PHP 返回的结果也比 phpmyadmin 少

即使使用 DefaultIfEmpty,Linq 查询也不返回预期结果

jquery ajax 加载结果列表,即使没有任何查询

mySQL查询返回数据,即使条件为false [duplicate]

laravel 查询数据返回的结果

Query.getResultList() 即使sql表有行也不返回结果