jQuery UI自动完成下拉不显示

Posted

技术标签:

【中文标题】jQuery UI自动完成下拉不显示【英文标题】:jQuery UI autocomplete drop down not displaying 【发布时间】:2012-06-09 01:01:13 【问题描述】:

我正在尝试使用 jQuery UI 自动完成功能来搜索 spotify 的音乐库。虽然一切顺利,但我确实得到了成功的回应:

没有下拉建议。例如,我正在搜索“时间”,我想查看:

Time,作者 Hans Zimmer 回到时间,Pitbull 大时间拉什

等等。这是我的 javascript 代码:

<script>$(function() $( "#spotify_song_search" ).autocomplete(source: function(request, response) 
        $.get("http://ws.spotify.com/search/1/track.json",  q: request.term ,function( data )  alert(data); response(data););
    ,success: function(data) 
            // pass your data to the response callback 
            alert(data); response(data);
        ););</script> 

我一定是做错了什么。我还在这里查看了 jQuery 文档:http://jqueryui.com/demos/autocomplete/,但它没有给出任何解释为什么会发生这种情况。我添加了警报,看看我是否至少会得到响应,我这样做了,但它只返回[object Object]。我需要做什么才能显示搜索结果?

错误: 第 417 行 Uncaught SyntaxError: Unexpected token ILLEGAL

【问题讨论】:

控制台选项卡中没有错误? 哦,没关系,您的网络标签上的状态是OK。我会研究代码。 也许您可以向我们展示更多代码,主要是您调用 3 次的 response() 函数,以及能够重现它的标记。 Make sure it the code is actually valid first. 您需要格式化响应数据,我假设这是在response() 方法中完成的。 jQueryUI 需要来自success() 函数的特定格式,如果不匹配,则不会显示结果。我怀疑从 Spotify 格式到预期格式的转换不正确。查看documentation,尤其是Remote DatasourceRemote JSONP datasource,并查看控制台中的“网络”选项卡以查看响应数据格式。跨度> 【参考方案1】:

自动完成小部件希望数据以非常特定的方式进行格式化,以便可以对其进行解析。您提供或传递给response 回调的数组必须是:

    带有字符串的数组, 包含具有 label 属性、value 属性或两者兼有的对象的数组。

(有关详细信息,请参阅“概述”/“预期数据格式”下的自动完成文档)

当您拥有无法更改的数据源时,执行此操作的典型方法是使用 $.map 将结果转换为自动完成期望的格式:

$("#spotify_song_search").autocomplete(
    source: function(request, response) 
        $.get("http://ws.spotify.com/search/1/track.json", 
            q: request.term
        , function(data) 
            response($.map(data.tracks, function (el) 
                return el.name;
            ));
        );
    
);

示例: http://jsfiddle.net/ANmUs/(注意:目前这在 Firefox 中似乎不起作用;这可能是由于响应的大小造成的。但它在 Chrome 中可以正常工作)

【讨论】:

我目前正在使用 chrome 的稳定版本,但它似乎仍然无法正常工作。我也没有看到任何请求。我使用了控制台,它给出了一个错误:Uncaught SyntaxError: Unexpected token ILLEGAL。我认为这与代码的$.map 部分有关。 @PeteA:你在找什么?我无法复制。 对不起,我的意思是我的网站。我将图片添加到我的帖子中,即使它在 jsfiddle 中工作正常,它也会给我一个错误。 @PeteA:我无法确认这一点,但我担心响应的大小可能会导致问题。 有一些奇怪的字符导致了问题。它没有出现在记事本++中,但随机出现在 html 中。这是“非法”角色。感谢您的帮助。

以上是关于jQuery UI自动完成下拉不显示的主要内容,如果未能解决你的问题,请参考以下文章

自动完成下拉菜单未正确显示

jquery-ui 自动完成:在下拉列表中显示对 ID-Name 的列表,但 ID 隐藏

jQuery UI 自动完成 - 没有结果消息

jquery ui自动完成仅显示数据库中的第一项

JQuery UI完成自动匹配的的下拉列表步骤

如何根据下拉选择更改 jquery ui 自动完成源