【问题标题】:jQuery UI autocomplete via ajax error:jQuery UI 通过 ajax 自动完成错误:
【发布时间】:2013-08-28 17:45:57
【问题描述】:

我已经搜索了几天,但找不到解决方法。

这是我的代码(简化为核心功能):

$("input").autocomplete({
    source: function( request, response ){
        $.ajax({
            url: 'inc/ajax.php',
            type: "GET",
            async: true,
            dataType: "json",
            data: {
              'task' : 'tasktodo',
              'squery' : request.term
            }, 
            success: 
                function( data ) {
                    response($.map( data, function(item){
                        return {
                            label : item['name'],
                            value : item['name']
                        }
                    }));
                }
        });     
    }
});

自动完成功能确实有效,但我在浏览器的控制台中收到以下错误:

 Uncaught TypeError: Object  has no method 'results' (in Chrome)
 TypeError: this.options.messages.results is not a function (in Firefox)

错误指向 jqueryui.js 中的一行,在我的脚本中由"response()" 调用。

即使错误不影响功能,我也想知道它为什么会出现。

【问题讨论】:

  • 会不会是数据为空?在这种情况下地图失败
  • 能不能也分享一下相关的html
  • 您似乎正在以某种方式启用一个名为 live region extension, adding a messages` 选项的实验性 API...无法从我这里重新创建...
  • 哦,哇,原来这么简单。删除“消息”选项就解决了。谢谢阿伦!!

标签: javascript jquery ajax jquery-ui autocomplete


【解决方案1】:

非常老的问题,但今天仍然相关,因为它发生在我身上,我不确定接受的答案是否涵盖所有基础,或解释问题。

发生这种情况是因为自动完成插件希望您提供一个带有 noResults 和 results 属性的消息对象,用于告诉它如何标记搜索结果。

noResults 属性应该是一个字符串,当您猜到没有结果时显示该字符串。

results 属性应该是一个接受 count 参数并返回字符串的方法。

类似这样的:

$("input").autocomplete({
    source: function( request, response ){
        ... your $.ajax request stuff
    },
    messages: {
        noResults: "No results",
        results: function(count){
            return count + (count == 0 ? ' result' : ' results');
        }
    }
});

调用response(data); 可能根本不需要设置这些属性。但就我而言,一位同事提供了一个消息对象,但将 noResults 和 results 属性都设置为字符串值,因此出现错误:

this.options.messages.results 不是函数

【讨论】:

  • 谢谢,Breeno,我已将您的答案标记为已接受,因为它详细解释了问题。干杯!
【解决方案2】:

试试这样的

success: function(data){
   response(data);

}

【讨论】:

    【解决方案3】:

    我认为响应数据映射功能存在错误,您可能需要像这样映射

    response($.map( data.d, function(item){
    return {
                                        label: item.name,
                                        value: item.name
                                    }
    

    【讨论】:

    • 试过了,发现它是双向的。虽然没有解决错误,但还是谢谢!
    猜你喜欢
    • 2013-09-14
    • 2011-04-02
    • 2015-09-28
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    相关资源
    最近更新 更多