Javascript自动完成,结果不重叠

Javascript自动完成,结果不重叠,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我有自动完成文本框,需要一些改进。如果你打字慢的话效果很好,但是如果你打字快的话,我会得到相乘的结果。例如,如果我将1个1个字母全部擦除到最后,我会得到结果,因为文本框中只有几个字母。后来的结果看起来是正确的,但看起来像是慢动作 当新的HTTP请求出现时,我尝试了abort()方法,但没有解决问题 方法在文本框的键控上触发 问题是如何停止以前的请求并只处理当前请求 函数getResults(inputValue){ var url=“Ajax/acResults.aspx”; url=url+

我有自动完成文本框,需要一些改进。如果你打字慢的话效果很好,但是如果你打字快的话,我会得到相乘的结果。例如,如果我将1个1个字母全部擦除到最后,我会得到结果,因为文本框中只有几个字母。后来的结果看起来是正确的,但看起来像是慢动作

当新的HTTP请求出现时,我尝试了abort()方法,但没有解决问题

方法在文本框的键控上触发

问题是如何停止以前的请求并只处理当前请求

函数getResults(inputValue){ var url=“Ajax/acResults.aspx”; url=url+“?输入=“+inputValue; url=url+“&idrnd=“+Math.random(); var xmlHttpPC=GetXmlHttpObject(); xmlHttpPC.onreadystatechange=函数(){ 如果(xmlHttpPC.readyState==4){ document.getElementById(“resultBox”).innerHTML=xmlHttpPC.responseText; } }; open(“GET”,url,true); xmlHttpPC.send(空); } 函数GetXmlHttpObject(){ var xmlHttp=null; 尝试 { //Firefox、Opera 8.0+、Safari xmlHttp=新的XMLHttpRequest(); } 捕获(e) { //Internet Explorer 尝试 { xmlHttp=新的ActiveXObject(“Msxml2.xmlHttp”); } 捕获(e) { xmlHttp=新的ActiveXObject(“Microsoft.xmlHttp”); } } 返回xmlHttp;
}仅当150ms内未删除或添加字母时,才使用debounce发送ajax调用(根据需要更改值):


您可以通过检查标志变量来实现,也可以将xmlhttp变量与null进行比较,如下所示-

var xmlHttp=null;
    function getResults(inputValue){
       if(xmlHttp!=null)
           return;
        //--------
            //-------
            if (xmlHttpPC.readyState==4)
                { 
                document.getElementById("resultBox").innerHTML=xmlHttpPC.responseText;
                xmlHttp=null;
                }
        };
        //--------
    }

    function GetXmlHttpObject(){
      xmlHttp=null;
      //------
    }

最后,我结合了XMLHttpRequest对象的标志检查和中止方法。
var xmlHttp=null;
    function getResults(inputValue){
       if(xmlHttp!=null)
           return;
        //--------
            //-------
            if (xmlHttpPC.readyState==4)
                { 
                document.getElementById("resultBox").innerHTML=xmlHttpPC.responseText;
                xmlHttp=null;
                }
        };
        //--------
    }

    function GetXmlHttpObject(){
      xmlHttp=null;
      //------
    }