在JQuery / Classic ASP中滚动时自动完成加载

时间:2017-07-17 14:58:46

标签: jquery autocomplete jquery-ui-autocomplete autoload onscroll

经典ASP中有一个自动完成文本框。最小长度设置为4,但自动完成列表返回超过500条记录的速度非常慢。

登录控制台返回预期结果,如果少于500行,则在自动填充文本框中返回正确的列表。

如果我想在滚动而不是加载页面时加载更多数据,那么最好的方法是什么?

$(document).ready( function(){  
    var availableCode = new Array();
    var strCode = "";

    <%
    Dim idxJs
    for idxJs = 0 to UBound(CodeList)-1 
    %>
        availableCode[<%=idxJs %>] = unescape('<%= Escape(CodeList(idxJs)) %>');

    <% next %>

    function customFilter(array, terms) {
        arrayOfTerms = terms.split(" ");
        var term = $.map(arrayOfTerms, function (tm) {
             return $.ui.autocomplete.escapeRegex(tm);
        }).join('|');
       var matcher = new RegExp("(?![^&;]+;)(?!<[^<>]*)("+term+")(?![^<>]*>)(?![^&;]+;)" , "i");
        return $.grep(array, function (value) {
            console.log("result - " + matcher.test(value.label || value.value || value));
            console.log("value - " + value)
           return matcher.test(value.slice(0, 10));
        });
    };

    $( "#frmCode" ).autocomplete({
      multiple: true,
      mustMatch: false,
      minLength: 4,
      delay: 100,
      search: function (event,ui) {
       window.pageIndex = 0;
      },
      source: function (request, response) {
        response(customFilter(
        availableCode, request.term));
      }
    });
} );

一些更新: 在经典的ASP代码的开头,我添加了下面的缓存控件,它做了一些改进,但它仍然无法正常工作。

<%@ Language=VBScript %>
<%

Response.buffer=true
Response.Expires = -1
Response.ExpiresAbsolute = Now() -1 
Response.CacheControl = "no-cache"
Response.AddHeader "cache-control", "private" 
Response.AddHeader "Pragma", "no-cache"

%>

2 个答案:

答案 0 :(得分:1)

对于匹配者,我对以下内容进行了更改。

var matcher = new RegExp("" + term,  "i");

我还添加了“切片”以仅显示前100名。这在此问题上取得了显着的性能提升。

$( "#frmCode" ).autocomplete({
    multiple: true,
    multipleSeparator: " ",
    mustMatch: false,
    minLength: 2,
    search: function (event,ui) {
    window.pageIndex = 0;
},
source: function (request, response) {
    response(customFilter(
    availableCode, request.term).slice(0, 100));
 }

感谢大家的建议!

答案 1 :(得分:0)

其中一个瓶颈是将数据输出到数组CodeList,然后循环遍历数据并写入每个单独的行来填充您的javascript数组。如果数组CodeList中的数据不经常更改,我使用计划任务每​​天运行几次运行vbscript来生成html / asp页面,其中javascript数组没有asp循环。您将使用实际的javascript数组数据替换for / next asp循环。页面加载速度会快得多。