3

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

这是我的代码(缩短为核心功能):

$("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()"在我的脚本中被调用。

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

4

3 回答 3

2

尝试这样的事情

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

}
于 2013-08-26T09:45:54.013 回答
2

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

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

noResults 属性应该是在没有结果时显示的字符串,您已经猜到了。

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

像这样的东西:

$("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 不是函数

于 2017-03-16T17:22:05.050 回答
1

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

response($.map( data.d, function(item){
return {
                                    label: item.name,
                                    value: item.name
                                }
于 2013-08-26T09:33:36.260 回答