jQuery UI Autocomplete的“源”回调中的“响应”和“请求”参数是什么?

我正在查看自动完成教程,我有几个问题: http : //jqueryui.com/demos/autocomplete/#option-disabled

$( "#tags" ) // don't navigate away from the field on tab when selecting an item .bind( "keydown", function( event ) { if ( event.keyCode === $.ui.keyCode.TAB && $( this ).data( "autocomplete" ).menu.active ) { event.preventDefault(); } }) .autocomplete({ minLength: 0, source: function( request, response ) { // delegate back to autocomplete, but extract the last term response( $.ui.autocomplete.filter( availableTags, extractLast( request.term ) ) ); }, focus: function() { // prevent value inserted on focus return false; }, select: function( event, ui ) { var terms = split( this.value ); // remove the current input terms.pop(); // add the selected item terms.push( ui.item.value ); // add placeholder to get the comma-and-space at the end terms.push( "" ); this.value = terms.join( ", " ); return false; } }); 

所以我理解源的参数是requestresponse 。 这些保留的关键字是? 在google中键入此内容时,我找不到任何内容。 我不清楚这里传递的请求和响应是什么。 请求只是抓住输入? 我在哪里可以阅读更多内容?

requestresponse只是代码作者选择赋予分配给自动完成小部件的source选项的回调的两个forms参数的名称:

只需指定源选项,即可自定义自动完成function以使用各种数据源。 数据源可以是:

  • 包含本地数据的数组
  • 一个String,指定一个URL
  • 回调

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

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

不, requestresponse不是保留关键字 – 如果是,则不能将它们用作函数参数名称。

这里发生的事情很简单,如果你在Node中做任何事情,你会看到模式。 它是异步JavaScript。

您正在将匿名函数传递给source 。 只要自动完成需要查询数据源(换句话说,用户输入某些内容),就会调用此函数。

函数的参数是requestresponserequest只是自动完成请求的信息; request.term是查询(用户输入的内容)。 这取决于你如何实现搜索 – 也许你有一个可能的局部变量,或者你可能会对服务器进行AJAX调用。

现在重要的部分:如果你正在进行AJAX调用,你不能简单地从source() return一个值,因为该函数将在AJAX调用完成之前返回很久。 这就是为什么有一个response参数。

response是传递给source()函数的函数引用,只要您有请求的答案,就会调用该函数。 通过闭包的魔力,您可以从AJAX回调中调用此函数。

response (可能不那么令人困惑地命名为callback )需要一个字符串数组或具有labelvalue属性的对象。 它将在自动完成下拉列表中显示这些结果。

把它们放在一起:

 $('selector').autocomplete({ ... source: function(request, response) { // calculate results for a query. response([{ label: 'Example', value: 'ex' }]); } }); 

它清楚地记录在jQuery UI自动完成页面中。

http://jqueryui.com/demos/autocomplete/

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

一个请求对象,具有一个名为“term”的属性,它引用当前文本输入中的值。 例如,当用户在城市字段中输入“new yo”时,自动完成术语将等于“new yo”。

一个响应回调,它期望一个参数包含要向用户建议的数据。 应根据提供的术语过滤此数据,并且可以采用上述任何简单本地数据格式(String-Array或具有标签/值/两者属性的Object-Array)。 在提供自定义源回调以处理请求期间的错误时,这很重要。 即使遇到错误,也必须始终调用响应回调。 这可确保窗口小部件始终具有正确的状态。