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