限制 ajax 自动完成结果

Posted

技术标签:

【中文标题】限制 ajax 自动完成结果【英文标题】:Limit ajax autocomplete results 【发布时间】:2018-07-24 05:18:02 【问题描述】:

鉴于数据不是本地数据,您如何限制搜索结果的数量。我知道本地数据很容易被限制,如下所示。

source: function(request, response) 
    var results = $.ui.autocomplete.filter(myarray, request.term);

    response(results.slice(0, 10));`

当我从外部获取数据时,这不是很好。下面是我的代码。

 $(function() 
  $("#search").autocomplete(
    source: "/accounts/ajax/search/",
    minLength: 2,
    select: function(event, ui )
        window.open(ui.item.url,'_self'),
    open: function(event, ui) 
        $('.ui-autocomplete').append("<li><a class = \" text-primary\" href='javascript:document.getElementById(\"search_form\").submit();'> See All Result </a></li>");
         ,
  );
);

【问题讨论】:

最有效的方法是限制结果服务器端。 您的source 似乎缺少一些关键代码....您所做的只是覆盖一些变量?请求在哪里?您应该能够像在第一个示例中所做的那样对结果进行切片(假设您不能在服务器端进行)。 小错误,刚刚编辑了我的帖子。 【参考方案1】:

您必须自己发出 ajax 请求并将有限的结果传递给响应回调。

默认情况下,当 source 为字符串时,对提供的字符串发出 GET 请求,参数名称为 term 并为输入值赋值。所以你必须重现这个:

$( "#autocomplete" ).autocomplete(
    source: function( request, response ) 
          $.get('/accounts/ajax/search/',  term: request.term, function(results) 
               response(results.slice(0, 10));
          );
      
);

【讨论】:

【参考方案2】:

您可以替换value for source with a function,然后手动进行ajax请求和结果处理:

$(function() 
  $("#search").autocomplete(
    source: function(request, response) 
      $.get("/accounts/ajax/search?term=" + request.term, function(data) 
        //limit results here
        response(data.slice(0, 10));
      );
    ,
    ...
  );
);

【讨论】:

以上是关于限制 ajax 自动完成结果的主要内容,如果未能解决你的问题,请参考以下文章

在 jQuery UI 自动完成中限制结果

JQuery 自动完成文本框 asp.net 限制结果

jQuery 自动完成嵌套 Ajax 调用

在 laravel 中搜索自动完成 ajax

AJAX Live Search是一种PHP搜索表单,类似于谷歌自动完成功能,可以在键入时显示结果。

浏览器自动完成/保存的表单在 ajax 请求中不起作用