这些回调让我疯狂

时间:2012-01-04 11:19:46

标签: jquery jquery-ui

$("#to").autocomplete({

    //define callback to format results
    source: function(req, add) {

        //pass request to server
        $.getJSON("friends.php?callback=?", req, function(data) {

            //create array for response objects
            var suggestions = [];

            //process response
            $.each(data, function(i, val) {
                suggestions.push(val.name);
            });

            //pass array to callback
            add(suggestions);
        });
    }
});

Source

我正在尝试熟悉自动完成功能(jquery-ui),然后我遇到了

function (req, add).

如何知道req是输入的数据?

回调add在哪里定义?

有人能指点我一个有用的教程,以便我能理解如何使用这些回调吗?

1 个答案:

答案 0 :(得分:3)

它来自自动完成插件。请参阅:http://jqueryui.com/demos/autocomplete

  

第三种变体,即回调,提供了最大的灵活性,可用于将任何数据源连接到自动完成。回调有两个参数:

     
      
  • 一个请求对象,具有一个名为" term"的属性,它引用文本输入中当前的值。例如,当用户输入" new yo"在城市字段中,自动填充术语将等于" new yo"。
  •   
  • 响应回调,它要求单个参数包含要向用户建议的数据。应根据提供的术语过滤此数据,并且可以采用上述任何简单本地数据格式(String-Array或具有标签/值/两者属性的Object-Array)。在提供自定义源回调以处理请求期间的错误时,这一点非常重要。即使遇到错误,也必须始终调用响应回调。这可确保窗口小部件始终具有正确的状态。
  •   

<强>更新

插件调用您提供的回调函数(source: function(req, add) {...}),插件传递这些参数的参数。您可以自由选择参数的名称。

您可以找到source code on Github。传递给回调的函数在line 134

中定义
this.response = function() {
    return self._response.apply( self, arguments );
};

并在line 311中调用回调(this.source是您的回调):

_search: function( value ) {
    this.pending++;
    this.element.addClass( "ui-autocomplete-loading" );

    this.source( { term: value }, this.response );
},